반응형
개요
- 기본 클래스 메서드를 효과적으로 숨길 수 있는 Method Hiding을 소개합니다
- 숨김은 개발자가 파생 클래스에서 부모 클래스의 메서드와 동일한 이름으로 새 메서드를 정의하는 경우에 발생합니다.
- 이 글에서는 메서드 숨기기의 개념이 메서드 재정의Overriding와 어떻게 다른지, 언제 사용하는지 살펴보겠습니다.
숨기기Hiding와 재정의Overriding
C#에서 메서드 재정의는 부모 클래스의 메서드의 이름을 그대로 사용하면서도 파생 클래스가 메서드 동작내용을 바꿔쓸 수 있도록 합니다.메서드 재정의는 베이스 클래스의 메서드를 가상 메서드(Virtual Method)로 선언하여 자식 클래스에서 재정의할 수 있도록 합니다.
메서드 숨기기는 베이스 클래스 메서드가 가상으로 선언되지 않더라도 new 키워드로 메서드를 다시 구현하는 것을 말합니다.
class BaseClass
{
public void MethodToHide()
{
Console.WriteLine("Base class method.");
}
}
class DerivedClass : BaseClass
{
public new void MethodToHide()
{
Console.WriteLine("Derived class method.");
}
}
// Usage:
BaseClass baseObj = new BaseClass();
DerivedClass derivedObj = new DerivedClass();
baseObj.MethodToHide(); // Output: Base class method.
derivedObj.MethodToHide(); // Output: Derived class method.
하지만 부모 클래스 기반으로 자식 객체를 인스턴스화하면 부모 클래스의 메소드가 실행됩니다. 이 점이 오버라이드와의 차이점입니다.
BaseClass obj = new DerivedClass();
obj.MethodToHide(); // Output: Base class method.
메소드 숨기기를 썼다는 것은 이런 말을 하는 것입니다.
"부모 클래스에 같은 이름을 가진 메소드가 있지만 이건 상관 없는 새로운 메소드야. 다형성은 쓰지 않을 거야."
하지만 협업자가 이런 의도를 알아차리려면, 파생 클래스를 열어봐야하므로 일반적으로는 overriding을 씁니다.
Hiding 의도가 팀에 공유되지 않았다면 의도되지 않은 동작으로 여겨질 수도 있습니다.
반응형
'C#' 카테고리의 다른 글
[C#] as, is 연산자 (1) | 2023.05.14 |
---|---|
[C#] 람다 식, 화살표, Lambda, Arrow Function (1) | 2023.05.14 |
[C#] 참조 형식(Reference Types)과 값 형식(Value Types) (3) | 2022.09.10 |
[C#] Immutable과 Mutable 타입 (0) | 2022.09.10 |
[C#] 묵시적(Implicit), 명시적(Explicit) 형변환 (0) | 2022.09.10 |
댓글