목표

  • sealed(봉인) 한정자에 대해 알아보자

강의시간에 들었던 sealed 키워드의 첫인상

sealed

  • 클래스에 sealed 한정자가 사용된 경우, 다른 클래스가 해당 클래스를 상속하지 못하도록 한다.
  • 주로 상수를 정의한 클래스거나 파라미터 클래스 등에 사용된다.
  • java에서 class에 final 붙이는 것과 비교되곤 하는데, 나도 그게 그거인 것 같다.
sealed class A
{
    public void doSomthing()
    {
        //...
    }
}

class B : A // 컴파일 오류 발생
{

}
  • 또는 파생형 클래스에서 재정의한 메서드에 sealed를 사용하면, 이후 파생형 클래스를 상속 받은 클래스에서 해당 메서드를 재정의하지 못하게 할 수 있다.
class A
{
    public virtual void DoSomething();
}

class B : A
{
    sealed public override void DoSomething()
    {

    }
}

class C : B
{
    public override void DoSomething() // 컴파일 오류 발생
    {

    }
}

sealed 이점

  • 위 예시와 같이 sealed를 사용하면 재정의하거나 상속하지 말아야 하는 부분임을 명시적으로 표현할 수 있다.
  • 또 C 클래스에 DoSomething이 없다는 것을 명시적으로 표현해 줌으로써, 성능 향상에 도움이 된다.

sealed 단점

  • 보통은 sealed로 성능향상을?!? 이라는 생각에서 구현하게 되는데..
  • 막상 봉인으로 구현할만한 꺼리를 찾기 힘들다.
  • 봉인으로만 해결되는 경우라면 interface를 공통으로 뽑지 못한 설계 실패인 경우일 수 있다.
  • sealed 키워드를 모르는 경우가 종종 있어서.. 힘들다.

+ Recent posts