IT일상

C# 메소드에서의 new 한정자는 꼭 필요한가?

Profile picture

Written by solo5star

2020. 10. 9. 18:56

C# 메소드 한정자 중에는 new 라는 것이 있습니다.

class BaseClass {
	public void SomeMethod() => Console.WriteLine("BaseClass");
}

class DerivedClass : BaseClass {
	public new void SomeMethod() => Console.WriteLine("DerivedClass");
}

(new DerivedClass() as BaseClass).SomeMethod();
// 결과 : BaseClass

new DerivedClass().SomeMethod();
// 결과 : DerivedClass

new 한정자는 부모 클래스의 메소드를 "숨긴다" 고 합니다.

virtual/override는 메소드를 재정의하여 다형성을 가지지만, newoverride와는 다르게 다형성을 가지지 않습니다.

class BaseClass {
	public virtual void SomeMethod() => Console.WriteLine("BaseClass");
}

class DerivedClass : BaseClass {
	public override void SomeMethod() => Console.WriteLine("DerivedClass");
}

BaseClass a = new DerivedClass();
a.SomeMethod();

// 결과
// DerivedClass

virtual/override는 위와 같이 작동합니다.

잘 알다싶이, C++에서도 Java에서도(virtual은 필요없지만) override는 부모 클래스의 메소드를 재정의하여 다형성을 가지게 됩니다.

그런데 C#을 배우면서 다소 생소한 new 한정자를 접하게 되었습니다.

부모 클래스의 메소드를 숨긴다고? 근데 new를 쓰지 않더라도 똑같지 않나?

...

결론을 먼저 말하자면 new 한정자를 사용하는 것으로 달라지는 점은 없습니다.

아래는 관련 StackOverflow 답변입니다.

1

https://stackoverflow.com/a/30990937

짧게 이야기하자면 -- 이것은 필요하지 않다, 어떠한 차이점도 없으며 그저 가독성을 위해 존재한다.

new 한정자는 메소드를 숨긴다는 것을 명시적으로 표시하기 위해 있으며 실상 new를 쓰지 않더라도 결과는 달라지지 않습니다.

C#을 처음 배우면서 이 한정자의 존재는 정말 혼란스러웠지만 StackOverflow에서 관련 내용을 알아보니 왜 존재하는 것인지 알 수 있게 되었습니다.


Profile picture

Written by solo5star

안녕하세요 👋 개발과 IT에 관심이 많은 solo5star입니다

  • GitHub
  • Baekjoon
  • solved.ac
  • about
© 2023, Built with Gatsby