반응형
- 의도하지 않은 클래스가 상속될 경우 예상치 못한 동작이나 버그가 발생, 또는 라이브러리나 공통 클래스에서 상속 제한 필요
- 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가 없어도 됨
반응형