C#

C# 객체지향 다형성 : new, virtual, override, sealed

코샵 2023. 3. 30. 03:21
반응형
C#에서는 다양한 키워드를 사용하여 메서드, 속성 및 이벤트를 재정의하거나 구현할 수 있습니다. 이번 글에서는 new, virtual, override, sealed 키워드에 대해 자세히 살펴보겠습니다.

new 키워드

new 키워드는 부모 클래스의 메서드, 속성 또는 이벤트를 숨기고 새로운 멤버를 정의할 때 사용됩니다. new 키워드를 사용하면 부모 클래스의 멤버를 완전히 대체할 수 있습니다. 다음은 new 키워드를 사용하여 메서드를 숨기는 예입니다.

public class Animal
{
    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public new void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 new 키워드를 사용하여 숨기고, Dog 클래스에서 새로운 Eat() 메서드를 정의합니다.


virtual 키워드

virtual 키워드는 메서드, 속성 또는 이벤트를 재정의할 수 있도록 허용합니다. virtual 멤버는 하위 클래스에서 재정의될 수 있습니다. 다음은 virtual 키워드를 사용하여 메서드를 재정의하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 virtual 키워드를 사용하여 재정의할 수 있도록 허용하고, Dog 클래스에서 Eat() 메서드를 재정의합니다.


override 키워드

override 키워드는 하위 클래스에서 가상 멤버를 재정의할 때 사용됩니다. override 멤버는 기본 구현을 대체합니다. 다음은 override 키워드를 사용하여 메서드를 재정의하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 virtual 키워드를 사용하여 재정의할 수 있도록 허용하고, Dog 클래스에서 override 키워드를 사용하여 Eat() 메서드를 재정의합니다.


sealed 키워드

sealed 키워드는 하위 클래스에서 멤버를 재정의할 수 없도록 합니다. sealed 멤버는 하위 클래스에서 숨길 수 없습니다. 다음은 sealed 키워드를 사용하여 메서드를 재정의할 수 없게 하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public sealed override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

public class Bulldog : Dog
{
    // This will cause a compiler error:
    // 'Bulldog.Eat()': cannot override sealed method 'Dog.Eat()'
    //public override void Eat()
    //{
    //    Console.WriteLine("Bulldog is eating.");
    //}
}

위의 예제에서 Bulldog 클래스는 Dog 클래스를 상속합니다. Dog 클래스에서 Eat() 메서드를 sealed 키워드를 사용하여 재정의할 수 없게 하고, Bulldog 클래스에서 Eat() 메서드를 재정의하려고 하면 컴파일러 오류가 발생합니다.


결론

C#에서 new, virtual, override, sealed 키워드를 사용하여 메서드, 속성 및 이벤트를 재정의하거나 구현할 수 있습니다. new 키워드는 부모 클래스의 멤버를 숨기고 새로운 멤버를 정의할 때 사용됩니다. virtual 키워드는 하위 클래스에서 멤버를 재정의할 수 있도록 허용합니다. override 키워드는 하위 클래스에서 가상 멤버를 재정의할 때 사용됩니다. sealed 키워드는 하위 클래스에서 멤버를 재정의할 수 없게 합니다. 이번 글을 통해 C#에서 멤버를 재정의하는 방법에 대해 알아보았습니다.