메서드 숨기기(Method Hiding)란 무엇인가?
C#에서 메서드 숨기기(Method Hiding)는 '섀도잉(Shadowing)'이라고도 불리는 기능입니다. 자식 클래스가 부모 클래스에 이미 존재하는 메서드와 동일한 이름의 자체 버전을 정의하는 것을 의미하며, 이때 오버라이드(override) 키워드 없이 new 키워드만 사용하면 됩니다.
즉, 자식 클래스는 부모로부터 물려받은 메서드를 그대로 사용하지 않고, 같은 이름의 자신만의 구현으로 대체하게 됩니다.
오버라이딩과의 차이점
메서드 숨기기는 오버라이딩과 혼동하기 쉽지만, 두 방식에는 중요한 차이가 있습니다.
- 오버라이딩(Overriding):
override키워드를 사용하며, 런타임 시 실제 객체의 타입을 기준으로 메서드가 호출됩니다. 다형성(polymorphism)이 완전히 지원됩니다. - 숨기기(Hiding):
new키워드를 사용하며, 참조 변수의 선언 타입을 기준으로 호출될 메서드가 결정됩니다.
예제 코드
다음 예제는 부모 클래스(Parent)의 GetInfo() 메서드를 자식 클래스(Child)에서 new 키워드를 사용해 숨기는 과정을 보여줍니다.
using System;
using System.Collections.Generic;
class Demo {
public class Parent {
public string GetInfo() {
return "This is Parent Class!";
}
}
public class Child : Parent {
public new string GetInfo() {
return "This is Child Class!";
}
}
static void Main(String[] args) {
Child child = new Child();
Console.WriteLine(child.GetInfo());
}
}실행 결과
This is Child Class!
위 실행 결과에서 알 수 있듯이, Child 타입의 객체에서 GetInfo()를 호출하면 부모 클래스의 메서드가 아닌 자식 클래스에서 새로 정의한 메서드가 실행됩니다. 이것이 바로 new 키워드를 통한 메서드 숨기기(섀도잉)의 동작 방식입니다.