[Java] sealed

2024. 9. 12. 21:24·Language/Java
반응형
  • 의도하지 않은 클래스가 상속될 경우 예상치 못한 동작이나 버그가 발생, 또는 라이브러리나 공통 클래스에서 상속 제한 필요
  • JDK 17부터 sealed를 도입
    • 클래스 계층 구조에 대한 제어를 더욱 강화
    • 클래스와 인터페이스가 허용된 하위 유형을 정의할 수 있다.
public interface Loan {
    double calculateInterest();
}
  • 어떤 클래스든지 Loan을 구현 가능한 상태

sealed 인터페이스 정의

  • sealed 인터페이스와 허용하는 하위 클래스를 선언 방법
public sealed interface Loan permits HomeLoan, PersonalLoan, AutoLoan {
    double calculateInterest();
}
  • Loan을 sealed로 지정, HomeLoan, PersonalLoan, AutoLoan만 Loan을 구현할 수 있음을 명시
  • 불필요하거나 의도되지 않은 구현을 방지

리플렉션

  • 리플렉션 API로 해당 인터페이스를 구현하는 모든 하위 클래스 검색 가능
var permittedSubclasses = Loan.class.getPermittedSubclasses();
for (Class<?> subclass : permittedSubclasses) {
    System.out.println("하위 클래스 = " + subclass);
}

패턴 매칭

  • 패턴 매칭으로 객체의 타입에 따라 다른 작업을 수행
switch (loan){
    case HomeLoan homeLoan -> System.out.println("Home Loan = " + homeLoan);
    case PersonalLoan personalLoan -> System.out.println("Personal Loan = " + personalLoan);
    case AutoLoan autoLoan -> System.out.println("Auto Loan = " + autoLoan);
}
  • loan 객체의 타입을 검사하고 해당 타입에 따라 다른 작업을 수행
  • 코드 작성 시 가능한 모든 loan을 확인 가능
  • switch 내부에 default가 없어도 됨
반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/Java' 카테고리의 다른 글
  • [Java] Exception
  • [Java] call by value, call by reference
  • [Java] StringUtils의 hasLength()와 hasText()
  • [Java]lombok 적용
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Spring Framework (7)
        • Spring (3)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    select
    PS
    mscoco
    C
    딥러닝
    CPP
    JavaScript
    블루프린트
    클래스
    언리얼엔진4
    Unreal Engine
    pytorch
    C++
    프로그래머스
    memcached
    map
    redis
    FPS
    알고리즘
    JS
    php
    NUXT
    게임
    파이썬
    웹
    Python
    MySQL
    게임 개발
    Unreal
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Java] sealed
상단으로

티스토리툴바