java nested interface(중첩인터페이스)

중첩인터페이스(Nested Interface)는 사실 중첩클래스(Nested Class)와 같은 맥락을 갖는다. 중첩클래스가 클래스 내부에 선언된 클래스라면 중첩인터페이스는 클래스 내부에 선언된 인터페이스이다. 특정 클래스와 아주 긴밀하 연관된 인터페이스일 경우 중첩인터페이스를 사용하며, UI프로그래밍에서 이벤트 처리용으로 주로 사용된다.

중첩클래스의 경우 인스턴스멤버클래스, 정적멤버클래스, 로컬클래스 3가지의 선언 방법이 있지만, 중첩인터페이스는 클래스의 멤버로만 선언 할 수 있다.

형태

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ButtonA{

OnClickListener listener;

void setOnClickListener(OnClickListener listener){
this.listener = listener
}

void touch(){
this.listener.onClick();
}

/* 내부인터페이스 */
interface OnClickListener{
void onClick();
}
}

ButtonA클래스는 listener를 소유하고 사용한다.(has-a) 만약 ButtonA, ButtonB, ButtonC클래스가 존재하며 각기 다른 타입의 listener를 사용할 경우 즉 자신만이 사용하는 타입의 인터페이스를 선언할 경우 외부가 아니라, 위 처럼 자신 내부에 중첩인터페이스로 선언하여 인터페이스의 외부적변경을 경계할 수 있다.

1
2
3
4
5
6
7
//내부인터페이스 구현 클래스
public class ListenerA implements ButtonA.OnClickListener{
@Override
public void onClick(){
System.out.println("난 ButtonA를 위해서만 일한다.");
}
}

위처럼 내부 인터페이스를 구현 할 수 있다.

Related Posts

중첩클래스