-
Java 17. Sealed ClassBackEnd/Java 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는 추상 클래스나 인터페이스를 만드려 하는데, 하위 클래스 경우의 수를 제한하고 싶을 때 사용하면 됩니다.
반응형'BackEnd > Java' 카테고리의 다른 글
Java 21. Record Pattern (0) 2024.12.11 Java 12-17. 주요 변경 내용 (0) 2024.12.10 Java 16. Record Class (2) 2024.12.08 Java 16. instanceof Pattern Matching (0) 2024.12.08 Java 15. Text Block (0) 2024.12.07