ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 17. Sealed Class
    BackEnd/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

    댓글

Designed by Tistory.