C# sealed 한정자의 개념
C#에서 sealed 한정자를 메서드에 적용하면, 해당 메서드는 더 이상 파생 클래스에서 재정의(override)할 수 없게 됩니다. 즉, 상속 계층 구조에서 메서드 재정의를 특정 지점에서 차단하는 역할을 합니다.
주의할 점은 sealed 메서드는 반드시 파생 클래스의 일부여야 하며, 이미 override된 메서드여야 한다는 것입니다. 따라서 sealed는 일반적으로 override 키워드와 함께 사용됩니다.
예제 코드
다음 예제에서는 ClassTwo 파생 클래스의 display() 메서드에 sealed 한정자가 적용되어 있으므로, 이후 이 메서드를 재정의할 수 없습니다.
class ClassOne {
public virtual void display() {
Console.WriteLine("baseclass");
}
}
class ClassTwo : ClassOne {
public sealed override void display() {
Console.WriteLine("ClassTwoderivedClass");
}
}
class ClassThree : ClassTwo {
public override void display() { // 컴파일 오류 발생!
Console.WriteLine("ClassThree: Another Derived Class");
}
}코드 설명
위 예제에서 ClassOne은 기본(base) 클래스이고, ClassTwo와 ClassThree는 이를 상속하는 파생 클래스입니다.
ClassTwo에서는 display() 메서드를 sealed override로 선언하여, 기본 클래스의 메서드를 재정의하는 동시에 이후의 추가 재정의를 봉인했습니다.
그러나 ClassThree에서 다시 display() 메서드를 재정의하려고 시도하고 있습니다. 이 코드는 컴파일 오류를 발생시킵니다. sealed로 선언된 메서드는 그 아래 파생 클래스에서 재정의하는 것이 허용되지 않기 때문입니다.
정리
sealed메서드는 파생 클래스에서 재정의를 금지합니다.sealed는 반드시override메서드에만 사용할 수 있습니다.- 클래스 전체에
sealed를 적용하면 해당 클래스 자체를 상속할 수 없게 됩니다.