Language/Java

[Java] sealed

덴마크초코우유 2024. 9. 12. 21:24
반응형
  • 의도하지 않은 클래스가 상속될 경우 예상치 못한 동작이나 버그가 발생, 또는 라이브러리나 공통 클래스에서 상속 제한 필요
  • 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, AutoLoanLoan을 구현할 수 있음을 명시
  • 불필요하거나 의도되지 않은 구현을 방지

리플렉션

  • 리플렉션 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가 없어도 됨
반응형