기록
728x90

 new ?

- new는 말 그대로 '새로 만든다' 이다. 메소드에서도 new 키워드는 새로 만드는 역할을 한다.

부모클래스 - 자식클래스 의 상속관계에서도 예외는 아니다.

new는 기존의 것(자신이 상속받은 부모클래스의 메소드)를 완전히 무시하고 같은 이름의 새로운 메소드를 만들때 사용한다.

 

override ?

- override 도 자신이 상속받은 부모클래스의 메소드를 다르게 만드는 것이긴 하지만 이 경우는

'새로 만든다' 보다는 '다시 만든다' 라는 표현이 더욱 적절하지 않을까 싶다.

 

new VS override ?

- ex ))) new는 필기가 되어있는 기존의 노트 한 권과 새 노트 한 권이 있다면 새 노트에 새로운 필기를 하여 그 것으로 공부를 하는 것이고

(기존의 노트와 새 노트는 완전 별개)

override는 기존에 필기가 되어있는 노트에 새로운 내용을 추가한다거나 있던 내용을 지우고 다시 쓰는 것이라고 할 수 있을 것이다.

(기존의 노트이지만 내용만 달라짐)

 

기본적으로 클래스를 선언하고 생성하면 자신이 선언된 형에 해당하는 메소드를 호출한다.

그 예로 Parents test = new Child(); 같이 업캐스팅을 할 경우 A는 자식클래스로 생성이 되었지만 부모클래스의 형으로 형변환이 되어

메소드를 호출할 경우 부모클래스가 갖고 있는 메소드를 호출하게 된다. 이 것은 new를 쓸 때도 마찬가지이다.

Parents의 A라는 메소드를 Child에서 new를 이용하여 새로 만들었다고 가정하자.

 

public class Child : Parents

{

 public new void A(){ …… }

}

 

Parents test = new Child();

test.A();

 

위 코드를 실행시킬 경우 Child의 A메소드는 Parents의 A메소드와 상관없이 완전히 새로 만든 것이기 때문에

새 노트가 아닌 기존의 노트를 꺼내보듯이

Parents 형으로 만들어진 test는 자신이 갖고 있는 Parents의 A메소드를 호출하게 된다.

 

하지만, override를 이용할경우, ( override는 같은 이름의 메소드를 부모클래스에서 virtual 로 만들었을 때만 쓸 수 있다 )

 

publid class Parents

{

 public virtual void A() { …… }

}

 

public class Child : Parents

{

 public override void A(){ …… }

}

 

Parents test = new Child();

test.A();

 

위 코드를 실행시키면 Parents 형으로 선언된 test라 할지라도 Child 에 있는 A 메소드를 호출하게 된다.

위에서 얘기했듯이 override는 기존의 노트에 새로운 내용을 추가하거나 지우고 다시쓰는 것으로

노트 자체는 변함이 없지만 내용이 달라졌기 때문에 기존의 노트를 꺼냈을 때 달라진 내용이 있는 것이다.

 

new 와 override( + virtual) 은 업캐스팅이 아니라면 둘 다 기존의 메소드를 재정의 하는 것으로 같은 기능을 하지만

업캐스팅의 경우 전혀 다른 결과를 가져오는 메소드 재정의 방법들이다.

[출처] C# new & override (뉴 & 오버라이드)|작성자 Beautiful Kim

profile

기록

@데굴데구르르 림

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

2025, 이제 사내 컨플루언스에 모두 작성하게 되어서 업데이트가 잘 없을 것 같습니다..