Java

[Java]중첩 인터페이스 및 내부 인터페이스(Nested Interface and Inner Interface)

DevStory 2022. 6. 27.

중첩 인터페이스 및 내부 인터페이스(Nested Interface and Inner Interface)

다른 인터페이스나 클래스 내부에 선언된 인터페이스를 중첩 인터페이스 또는 내부 인터페이스라고 말합니다. 중첩 인터페이스를 직접적으로 접근하는 것은 불가능하며, 인터페이스 또는 클래스를 그룹화하는 목적으로 사용됩니다.

 

아래 사진처럼 Map 인터페이스를 확인해보면 Entry 인터페이스가 중첩되어 있는 것을 확인할 수 있습니다.


중첩 인터페이스 특징

  • 중첩 인터페이스는 기본적으로 정적(static)입니다. 따라서, static 키워드를 명시할 필요가 없습니다.
  • 클래스 내부에 선언된 중첩 인터페이스는 모든 접근 한정자를 사용할 수 있습니다.
  • 인터페이스 내부에 선언된 중첩 인터페이스는 public 한정자만 사용할 수 있으므로 암시적으로 public입니다.

예제 1. 인터페이스 내부에 중첩된 인터페이스

다음 예제는 인터페이스 내부에 인터페이스를 선언하며, 클래스는 중첩된 인터페이스를 구현하기 위해 점(.) 연산자를 사용하여 중첩된 인터페이스를 접근합니다.

public interface MyInterface {
  // 중첩 인터페이스입니다.
  interface NestedInterface {
    void show();
  }
}

// 점(.) 연산자로 중첩 인터페이스를 구현합니다.
public class MyClass implements MyInterface.NestedInterface {
  public void show() {
    System.out.println("Hello!");
  }
}

public class Main {
  public static void main(String args[]) {
    MyClass myClassObject = new MyClass();
    myClassObject.show();

    MyInterface.NestedInterface obj = myClassObject;
    obj.show();
  }
}

실행 결과

Hello!
Hello!

예제 2. 클래스 내부에 중첩된 인터페이스

다음 예제는 클래스 내부에 인터페이스를 선언하며, 클래스 내부에 있는 중첩 인터페이스를 구현하기 위해 점(.) 연산자를 사용하여 중첩된 인터페이스를 접근합니다.

public class Test {
  // 클래스 내부에 선언된 중첩 인터페이스입니다.
  interface NestedInterface {
    void show();
  }
}

// 점(.) 연산자로 중첩 인터페이스를 구현합니다.
public class MyClass implements Test.NestedInterface {
  public void show() {
    System.out.println("Hello!");
  }
}

public class Main {
  public static void main(String args[]) {
    MyClass myClassObject = new MyClass();
    myClassObject.show();

    Test.NestedInterface obj = myClassObject;
    obj.show();
  }
}

실행 결과

Hello!
Hello!

정리

  • 중첩된 인터페이스는 인터페이스 또는 클래스에 선언된 인터페이스입니다.
  • 중첩된 인터페이스는 클래스 또는 인터페이스를 그룹화하는 목적으로 사용됩니다.
반응형

댓글