Java 중첩 인터페이스란?
Java에서는 인터페이스 내부에 또 다른 인터페이스를 선언하거나, 클래스 내부에 인터페이스를 선언할 수 있습니다. 이렇게 다른 타입 안에 선언된 인터페이스를 중첩 인터페이스(Nested Interface)라고 부릅니다.
중첩 인터페이스는 특정 클래스나 인터페이스와 밀접하게 연관된 기능 계약을 그룹화하고 싶을 때 유용합니다. 예를 들어, 외부 클래스의 기능 중 일부만 구현 대상으로 노출하고 싶은 경우에 활용됩니다.
중첩 인터페이스의 규칙
중첩 인터페이스를 사용할 때는 다음 세 가지 규칙을 기억해야 합니다.
- 인터페이스 내부에 선언된 중첩 인터페이스는 반드시
public이어야 합니다. 인터페이스의 멤버는 암묵적으로 public이기 때문입니다. - 클래스 내부에 선언된 중첩 인터페이스는
public,protected,private, 패키지 접근 수준 등 어떤 접근 제어자든 자유롭게 지정할 수 있습니다. - 중첩 인터페이스는 별도로 표기하지 않아도 기본적으로 static으로 취급됩니다. 따라서 외부 클래스의 인스턴스 없이 독립적으로 구현할 수 있습니다.
예제 코드
다음은 클래스 내부에 중첩 인터페이스를 선언하고 이를 구현하는 예제입니다. 주목할 점은 구현 클래스가 인터페이스 이름을 Animal.Activity처럼 외부 클래스 이름 뒤에 점(.)을 붙여 참조한다는 것입니다.
class Animal {
interface Activity {
void move();
}
}
class Dog implements Animal.Activity {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class Tester {
public static void main(String args[]) {
Dog dog = new Dog();
dog.move();
}
}실행 결과
Dogs can walk and run
핵심 정리
- 중첩 인터페이스는 관련된 기능을 논리적으로 묶어주는 역할을 하며, 코드의 응집도를 높여줍니다.
- 인터페이스 안에 선언하면 무조건 public이 되지만, 클래스 안에 선언하면 접근 범위를 세밀하게 제어할 수 있습니다.
- static이 기본 적용되므로
외부클래스명.인터페이스명형태로 참조하여 구현하면 됩니다.