중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다.
인터페이스를 클래스 내부에서 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현객체를 만들기 위함이다.
중첩 인터페이스는 암시적으로 static이므로 static을 생략해도 항상 객체 없이 인터페이스를 사용할 수 있다.
중첩 인터페이스는 안드로이드와 같은 UI 프로그램에서 이벤트를 처리할 목적으로 많이 활용된다.
예를 들어 버튼을 클릭했을 때 이벤트를 처리할 객체는 중첩 인터페이스를 구현해서 만든다.
package ch09.sec06.ex01;
public class Button {
// 정적 중첩 인터페이스
public static interface ClickListener {
// 추상 메서드
void onClick();
}
}
setter를 사용해 외부에서 구현객체를 필드에 저장할 수 있도록 코드 작성
package ch09.sec06.ex02;
public class Button {
public static interface ClickListener {
void onClick();
}
private ClickListener clickListener;
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
public void click() {
this.clickListener.onClick();
}
}
package ch09.sec06.ex02;
public class ButtonEx {
public static void main(String[] args) {
Button btnOk = new Button();
// OK 버튼 클릭 이벤트를 처리할 ClickListener 구현 클래스
class OkListener implements Button.ClickListener {
@Override
public void onClick() {
System.out.println("ok 버튼을 클릭했습니다.");
}
}
// Ok 버튼 객체에 ClickListener 구현 객체 주입
btnOk.setClickListener(new OkListener());
btnOk.click();
Button btnCancel = new Button();
class CancelListener implements Button.ClickListener {
@Override
public void onClick() {
System.out.println("cancel button 클릭");
}
}
btnCancel.setClickListener(new CancelListener());
btnCancel.click();
}
}
OkListener, CancelListener는 이벤트를 처리할 구현 클래스이다.
onClick() 메소드를 오버라이딩해 버튼이 클릭되었을 때 해야할 일을 코딩한다.
btnOk.setClickListener(new OkListener());
btnCancel.setClickListener(new CancelListener()); 코드는 버튼이 앞으로 클릭되었을 때 처리를 담당할
ClickListener 구현객체를 설정하는 코드이다.
이 코드는 onClick 메소드가 호출되면 버튼에 설정된 ClickListener 구현 객체의 onClick 메소드가 실행되는 코드이다.
버튼에 어떤 ClickListener 구현객체가 설정되었냐에 따라 실행결과가 달라지는것이 핵심이다. (다형성)
'Java' 카테고리의 다른 글
예외 (1) | 2024.07.09 |
---|---|
익명 객체 (0) | 2024.07.06 |
로컬 클래스 / 바깥 클래스 (0) | 2024.07.06 |
중첩 클래스 / 인스턴스 멤버 클래스 / 정적 멤버 클래스 (0) | 2024.07.05 |
인터페이스 - private 메소드 (0) | 2024.07.01 |