C#

[C#]봉인 클래스(Sealed Class) 및 봉인 메서드(Sealed Class)

DevStory 2022. 5. 15.

봉인 클래스(Sealed Class)

클래스가 다른 클래스에 상속되는 것을 원하지 않을 때 해당 클래스를 봉인 클래스(Sealed Class)로 선언할 수 있습니다. 봉인 클래스는 sealed 키워드로 선언합니다. 

// 봉인 클래스입니다.
sealed class Parent { }

// 봉인 클래스는 상속될 수 없습니다.
class Child : Parent { }

class Program
{
  static void Main(string[] args)
  {
  }
}

실행 결과

위 예제에서 sealed 키워드를 사용하여 밀봉 클래스 Parent를 만들었습니다. 밀봉 클래스는 다른 클래스에 상속될 수 없으므로 컴파일 에러가 발생합니다.


봉인 클래스 특징

  • 봉인 클래스와 추상 클래스는 다릅니다.
  • 봉인 클래스는 추상 메서드를 가질 수 없습니다.
  • 다른 클래스에 상속될 수 없으므로 상속 계층에서 최하위 클래스여야 합니다.
  • 봉인 클래스는 상속을 피하거나 제한하기 위해 고안되었습니다.
  • sealed 키워드는 클래스뿐만 아니라 메서드, 프로퍼티에 사용할 수 있습니다.

봉인 메서드(Sealed Method)

부모 클래스에 정의된 클래스를 자식 클래스에서 재정의할 수 없는 경우 봉인 메서드(Sealed Method)라고 합니다. 클래스에서 메서드가 가상(virtual)으로 선언되면 자식 클래스가 메서드를 재정의할 수 있습니다.

class class1
{
  public virtual void show() 
  {
    Console.WriteLine("class1의 show() 메서드");
  }
}

class class2 : class1
{
  public override void show()
  {
    Console.WriteLine("class2의 show() 메서드");
  }
}

class class3 : class2
{
  public override void show()
  {
    Console.WriteLine("class3의 show() 메서드");
  }
}

class1의 show() 메서드가 가상 메서드(Virtual Method)로 선언되었으므로 자식 메서드에서 재정의할 수 있습니다.

 

하지만, 다음 예제처럼 class2의 show() 메서드를 봉인 메서드로 선언하면 class2의 하위 클래스는 show() 메서드를 더 이상 재정의할 수 없습니다.

class class1
{
  public virtual void show() 
  {
    Console.WriteLine("class1의 show() 메서드");
  }
}

class class2 : class1
{
  public sealed override void show()
  {
    Console.WriteLine("class2의 show() 메서드");
  }
}

class class3 : class2
{
  public override void show()
  {
    Console.WriteLine("class3의 show() 메서드");
  }
}

class Program
{
  static void Main(string[] args)
  {
    class3 obj = new class3();
    obj.show();
  }
}

실행 결과


추상 클래스와 차이점

  • 추상 클래스에는 추상 및 비추상 메서드가 존재하지만, 봉인 클래스에는 추상 및 가상 메서드가 존재할 수 없습니다.
  • 추상 클래스는 직접 인스턴스화할 수 없습니다. 하지만, 봉인 클래스는 인스턴스를 생성할 수 있습니다.
  • 추상 클래스를 사용하기 위해서는 확장된 클래스를 만들어야 합니다. 하지만, 봉인된 클래스에서 확장된 클래스를 만드는 것은 불가능합니다.
  • 추상 클래스는 상속 계층 구조에서 최하위 클래스가 될 수 없지만, 봉인 클래스는 최하위 클래스여야 합니다.

정리

  • 봉인 클래스는 확장이 불가능한 클래스입니다.
  • 봉인 메서드는 자식 클래스에서 재정의할 수 없습니다.
반응형

댓글