C# 메소드 숨기기

CLR에게 기반 클래스에서 구현된 버전의 메소드를 감추고 파생 클래스에서 구현된 버전만을 보여주는 것을 메소드 숨기기(method hiding)라고 말합니다.

메소드 숨기기


메소드 숨기기는 자식 클래스(파생 클래스)의 메소드를 new 키워드로 한정함으로써 할 수 있습니다. 생성자를 호출할 때 사용하는 new 연산자와는 다른 것입니다.

class Item
{
    public void Using()
    {
        Console.WriteLine("Item.Uinsg()");
    }
    
}

class Posion : Item
{
    public new void Using()
    {
        Console.WriteLine("Posion.Using()");
    }
}

class MainApp
{
    public static void Main(string[] args)
    {
        Posion item = new Posion();
        item.Using();
    }
}
출력 결과

Posion.Using()

위와 같이 new 키워드로 부모 클래스(기반 클래스)의 메소드를 숨기고 자식 클래스(파생 클래스)의 메소드를 호출할 수 있습니다.

메소드 숨기기를 통해 오버라이딩과 같은 효과를 얻을 수 있습니다. 하지만 메소드 숨기기는 오버라이딩과 다릅니다.

class Item
{
    public void Using()
    {
        Console.WriteLine("Item.Uinsg()");
    }
    
}

class Posion : Item
{
    public new void Using()
    {
        Console.WriteLine("Posion.Using()");
    }
}

class MainApp
{
    public static void Main(string[] args)
    {
        Item item = new Posion();
        item.Using();
    }
}
출력 결과

Item.Using()

위와 같이 item 객체를 선언하면 부모 클래스(기반 클래스)의 메소드가 실행됩니다. 이처럼 메소드 숨기기는 완전한 다형성을 표현하지 못하는 한계를 갖고 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다