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#에서 멤버를 재정의하는 방법에 대해 알아보았습니다.
'C#' 카테고리의 다른 글
C# Reflection문 (0) | 2023.04.05 |
---|---|
C# 네이밍 규칙 : PascalCase, camelCase, Snake case (0) | 2023.04.05 |
C# 정규표현식 (0) | 2023.03.29 |
C# Delegate : 대리자 (0) | 2023.03.28 |
C# Dictionary ContainsKey() vs TryGetValue() (0) | 2023.03.28 |