이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다.
Java 15부터 무분별한 자식 인터페이스 생성을 방지하기 위해 봉인된 인터페이스를 사용할 수 있다.
인터페이스 A의 자식 인터페이스는 인터페이스 B만 가능하고, 그 이외는 자식 인터페이스가 될 수 없도록 아래와 같이 인터페이스 A를 봉인된 인터페이스로 선언할 수 있다.
public sealed interface InterfaceA permits InterfaceB{
}
sealed 키워드를 사용하면 permits 키워드 뒤에 상속 가능한 자식 인터페이스를 지정해야한다.
봉인된 InterfaceA를 상속하는 interfaceB는 non-sealed 키워드로 아래와 같이 선언하거나 sealed 키워드를 사용해서 또 다른 봉인된 인터페이스로 선언해야 한다.
public non-sealed interface InterfaceB extends InterfaceA {
}
non-sealed는 봉인을 해제한다는 뜻이다. 따라서 InerfaceB는 다른 자식 인터페이스를 만들 수 있다.
public interface InterfaceC extends InterfaceB {
}
예제
interfaceA.java
public sealed interface InterfaceA permits InterfaceB{
void methodA();
}
interfaceB.java
public non-sealed interface InterfaceB extends InterfaceA {
void methodB();
}
interfaceC.java
public interface InterfaceC extends InterfaceB {
void methodC();
}
ImplClass.java
public class ImplClass implements InterfaceC {
public void methodA() {
System.out.println("methodA() 실행");
}
public void methodB() {
System.out.println("methodB() 실행");
}
@Override
public void methodC() {
System.out.println("methodC() 실행");
}
}
Main.java
public class Main {
public static void main(String[] args) {
ImplClass impl = new ImplClass();
InterfaceA ia = impl;
ia.methodA();
System.out.println();
InterfaceB ib = impl;
ib.methodA();
ib.methodB();
System.out.println();
InterfaceC ic = impl;
ic.methodA();
ic.methodB();
ic.methodC();
}
}
/*
methodA() 실행
methodA() 실행
methodB() 실행
methodA() 실행
methodB() 실행
methodC() 실행
*/
'Java Category > Java' 카테고리의 다른 글
[JAVA] 라이브러리 생성 및 불러오기 (0) | 2023.07.19 |
---|---|
[JAVA] 중첩 인터페이스 (nested interface) (0) | 2023.07.18 |
[JAVA] 인터페이스 - default 메소드, static 메소드, private 메소드 (0) | 2023.07.15 |
[JAVA] 봉인된 클래스(sealed class) (0) | 2023.07.14 |
[JAVA] main() 메소드의 String[] 매개변수 용도 (0) | 2023.07.13 |