C#에는 final 키워드가 없다
Java에는 final이라는 키워드가 있지만, C#에는 이에 직접 대응하는 final 키워드가 존재하지 않습니다. 대신 C#에서는 sealed 키워드를 사용하여 동일한 기능을 구현할 수 있습니다.
sealed 키워드란?
sealed 한정자를 메서드에 적용하면 해당 메서드는 더 이상 파생 클래스에서 재정의(override)할 수 없게 됩니다. 즉, 상속 계층 구조에서 특정 지점 이후로는 메서드의 동작을 변경할 수 없도록 잠그는 역할을 합니다.
단, sealed 한정자를 사용하려면 다음 두 가지 조건을 충족해야 합니다.
- sealed 메서드는 반드시 파생 클래스의 멤버여야 합니다.
- sealed 메서드는 이미 override된 메서드에만 적용할 수 있습니다.
예제 코드
다음 예제에서 ClassTwo의 display() 메서드에는 sealed 한정자가 적용되어 있습니다. 따라서 ClassThree와 같은 하위 파생 클래스에서 이 메서드를 재정의하려고 하면 컴파일 오류가 발생합니다.
여기서 ClassOne은 기본 클래스이며, ClassTwo와 ClassThree는 각각 파생 클래스입니다.
class ClassOne {
public virtual void display() {
Console.WriteLine("Baseclass");
}
}
class ClassTwo : ClassOne {
public sealed override void display() {
Console.WriteLine("ClassTwo:derivedClass");
}
}
class ClassThree : ClassTwo {
public override void display() {
// 컴파일 오류! sealed 메서드는 재정의할 수 없습니다.
Console.WriteLine("ClassThree: Another Derived Class");
}
}핵심 정리
- Java의
final에 해당하는 C# 키워드는sealed입니다. - sealed 메서드는 파생 클래스에서 선언된 override 메서드에만 사용할 수 있습니다.
- sealed가 적용된 메서드는 그 아래 단계의 파생 클래스에서 더 이상 재정의할 수 없습니다.
- 참고로, 클래스 자체에 sealed를 적용하면 해당 클래스의 상속 자체를 차단할 수도 있습니다.