C# 오버라이딩

2023. 5. 13. 06:05C# 프로그래밍 개념

오버라이딩은 클래스를 불러올 때 누구의 것을 불러오는 지 알 수가 없는 경우가 있어서(클래스에서 함수나 클래스 같은 걸 불러올 때 누가 이 클래스나 함수를 부르는 지 알 수 없는 경우) 그 클래스만의 특성을 살린 새로운 함수를 선언해야 할 때가 있다.

 

그걸 불러오는 클래스나 함수에서 진행하면 코드의 길이가 너무 길어지기 때문에 문제가 생긴다. 이거는 자식에서 추가로 구현한 것을 부모가 모르는 상태라서 문제가 생기는 것이다.

 

그런 상황을 해결하기 위해 만들어진 게 오버라이딩이다. 오버라이딩은 상속의 개념을 지키고, 코드의 재활용성을 유지하기 위해서 만들어진 개념이다.

 

다형성의 핵심 문법 중의 하나이다. 다형성이라는 말은 자료형이 하나인데, 눈에 보기에는 같아 보이지만 실체가 다를 수도 있는 경우를 말한다. 업캐스팅으로 그대로 상속받은 걸 불러오면 각자의 특성대로 불러올 수가 없어서 그걸 보완해주는 것이 virtual / overriding 문법이다.

 

virtual을 하고 자식에서 구현한 게 있으면 그대로 실행하라는 의미.

자식 단에서는 override를 쓰면 된다. 나는 자식 단에서 그걸 재구현했다는 의미로 쓸 수 있다.

모 쪽에서는 virtual, 자식은 override를 붙인다.

 

Monster와 Player모두 자신이 재구현한 override에 들어가게 된다. 나만이 특별하게 구현해야 하는 내용을 override해서 부모와 다르게 할 수 있다. 부모 입장에서는 자식들이 알아서 할 수 있게 되는 셈이다.

 

생성자는 오버라이딩을 할 수 없다. 멤버변수를 만드는 작업이 필요한데, 그걸 다른 쪽에 맡길 수가 없어서 생성자는 오버라이딩이 되지 않는다.

 

한편, 프로퍼티는 virtual이 된다. 프로퍼티도 오버라이딩이 되는 걸 확인할 수 있다. 어떻게 보면 오버라이딩을 간단하게 표현한 게 프로퍼티라고 생각할 수도 있다.

 

부모가 인터페이스를 대략적으로 만들어 놨으니 니들 거는 니들이 알아서 해라라는 의미가 overriding이 된다. 참고로, 부모가 protected면 자식도 똑같이 protected로 구현해야 한다. 부모에게 있는 것을 온전히 똑같이 구현해야 하는 것.

 

static virtual 이러한 형태로 쓰는 것은 안된다. 이유는 this가 없기 때문이라고 한다.

'C# 프로그래밍 개념' 카테고리의 다른 글

C# 상속(Inheritance)  (0) 2023.05.14
C# 배열  (0) 2023.05.13
C# 인터페이스  (0) 2023.05.12
C# 메모리 2편  (0) 2023.05.11
IDE 개발환경  (0) 2023.05.10