봉인된 클래스(sealed class)
는 Java 15
에 추가된 클래스로, 자식 클래스의 남발을 막기 위해 사용되는 문법입니다.
기존의 클래스는 final
키워드를 통해서 상속을 막지 않는 이상은 무한대로 상속이 가능했었습니다. 이 과정에서 잘못된 상속 관계를 가질 확률이 있는데요. 이러한 현상을 방지하고 안정적인 상속을 위해 봉인된 클래스
를 사용합니다.
봉인된 클래스
는 선언부에 sealed
키워드를 붙여서 작성합니다. 그리고 permits
명령 뒤에 상속을 허용할 자식 클래스를 적습니다. 이때 permits
에 적혀진 클래스 외에는 봉인된 클래스를 상속할 수 없게 막힙니다.
sealed class 클래스명 permits 상속을_허용할_클래스들 {}
다음은 봉인된 클래스의 예제 코드입니다.
public sealed class Fruit permits Apple {
public Fruit() {}
}
봉인된 Fruit 클래스는 Apple 클래스만이 상속받을 수 있습니다.
봉인된 클래스
를 사용할 땐 상속을 허가받아 상속받은 클래스에도 봉인에 대한 추가 작업을 해주어야합니다.
자식 클래스의 선언부에 올 수 있는 키워드는 final, sealed, non-sealed
세 가지가 있습니다.
위 세가지 키워드 중 하나라도 적지 않는다면 위 사진과 같이 제어자가 없다고 오류를 발생시킵니다.
fianl
은 알고있는대로, 더 이상 상속할 수 없는 최종 클래스임을 나타내고, sealed
는 해당 클래스를 봉인상태로 유지, non-sealed
는 봉인을 해제한다는 의미를 갖습니다. 따라서 상황에 따라 세 가지 중 원하는 키워드를 선택해서 반드시 명시해주어야합니다.
public non-sealed class Apple extends Fruit {
public Apple() {}
}