본문으로 바로가기

내가 배우고 있는 c#이라는 언어의 성질 중 하나는 다형성이다.

다형성이란? 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질

 

자, 여기 부모클래스와, 부모클래스를 상속받은 자식 클래스가 있다.

그리고 자식 클래스에는 딱 보기에 비슷한 두개의 매서드가 있다. 

자세히 보면 자식클래스의 매서드는 앞에 붙은 키워드가 다르다.

위는 new 키워드로 재정의한 매서드이고

아래는 override로 재정의한 매서드이다.

 

여기서 문제.

자식 클래스가 인스턴스를 만들때, 자식 클래스 형식 변수에 할당한다면 문제가 일어나지 않는다.

 

 

하지만 만약 부모 클래스 형식 변수에 할당한다면?

위의 코드와는 완전히 다른 결과가 나오고 만다.

new키워드로 재정의한 매서드는 부모 클래스와 연결이 되지않고, 정말 새로운 매서드가 되는 것이다.

자식 클래스의 Hi와 부모클래스의 Hi 메서드는 완전히 다른 메서드가 된 것!

 

그렇다면?

c#에서는 상속을 여러번 걸쳐서 받는 경우가 많으므로,

이런 c#의 다형성을 활용하기 위해서라면 new보다는 overriding을 선택해야한다.

특히, new 키워드는 주의해서 알맞은 상황에 써야할 것 같다.

상속과정에서 굳이 new 키워드를 사용해 상속 연결을 끊을 상황이 나올지는 아직 잘 모르겠기 때문에..

일단 오버라이딩을 잘 쓰자!