BackEnd/Java
Java 17. Sealed Class
hanseom
2024. 12. 9. 07:00
반응형
Sealed Class
Java 15 preview, Java 17 정식으로 출시된 기능으로 봉인된 클래스입니다.
다음은 Animal 추상 클래스를 상속 받은 Dog와 Cat 클래스입니다.
public abstract class Animal {
}
class Dog extends Animal {
public String bark() {
return "멍멍";
}
}
class Cat extends Animal {
public String purr() {
return "야옹";
}
}
만약 Animal의 하위 클래스로 Dog와 Cat, 두 클래스로만 제한하고 싶은 경우 Sealed 클래스를 사용합니다. 즉, Sealed 클래스는 하위 클래스를 지정된 클래스로만 제한하는 기능입니다. 다음은 Sealed 클래스로 변환한 코드입니다.
public sealed abstract class Animal permits Dog, Cat {
}
public final class Dog extends Animal {
// ...
}
public final class Cat extends Animal {
// ...
}
- Animal: Sealed 클래스로 변환 후 상속할 하위 클래스를 permits 으로 지정합니다.
- Dog, Cat: 하위 클래스의 경우, 다음의 키워드로 지정해 주어야 합니다.
Sealed Class의 하위 클래스 키워드
- final: 재상속이 불가능합니다.
- sealed: 상속이 가능하고, 한 번 더 sealed class로 동작합니다.
- non-sealed: 상속은 가능하지만, 하위 타입 추척은 불가능합니다.
Sealed Class 자식 클래스의 위치 제한
- named module: 부모와 같은 모듈에 있어야 합니다.
- unnamed module: 부모와 같은 패키지에 있어야 합니다.
- 한 파일에 부모와 자식 모두 있다면, permits을 생략할 수 있습니다.
Sealed Class 장점
- 상위 클래스를 설계할 때 호환성 걱정을 덜 수 있습니다.
- enum 클래스처럼 Sealed 클래스를 사용할 수 있습니다. (컴파일 시점에 타입을 알 수 있습니다.)
Sealed Interface
- Sealed 클래스와 개념적으로 동일합니다.
Sealed는 추상 클래스나 인터페이스를 만드려 하는데, 하위 클래스 경우의 수를 제한하고 싶을 때 사용하면 됩니다.
반응형