Programing Language/Java

[Java] 중첩 인터페이스(Nested Interface)

vinedpillar 2022. 7. 12. 11:04

중첩 인터페이스(Nested Interface)

  • 중첩 인터페이스는 클래스의 내부에 멤버 요소로 선언된 인터페이스를 뜻합니다.

  • 인터페이스를 클래스 내부에 선언하여 바깥 클래스와 긴밀한 관계를 가지는 구현 객체를 만들기 위해 사용됩니다.

  • 중첩 클래스와 같이 접근 제어자를 사용하여 접근 범위를 설정할 수 있습니다.
    • public: 다른 패키지에서 중첩 인터페이스 접근 가능
    • (default): 같은 패키지에서만 중첩 인터페이스 접근 가능
    • private: 바깥 클래스 내부에서만 중첩 인터페이스 접근 가능

  • 또한 static 제어자를 통해 정적인 특성을 가지도록 설정할 수 있습니다. 

  • 중첩 인터페이스는 보통 안드로이드 UI 프로그램에서 이벤트를 처리할 목적으로 활용됩니다.
중첩 인터페이스 선언 방법

class OuterClass {
    [public | (default) | private] [static] interface NestedInterface {
    	// 상수 필드
        // 추상 메서드
        // 디폴트 메서드
        // 정적 메서드
    }
}
중첩 인터페이스 사용 예시

// 버튼 클래스
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();
    }
}


// 실행 클래스
public class ButtonExample {
    public static void main(String[] args) {
    	// OK 버튼 객체 생성
        Button btnOk = new Button();
        
        // OK 버튼 클랙 이벤트를 처리하는 ClickListener 구현 클래스
        class OkListener implements Button.ClickListener {
        	@Override
            public void onClick() {
            	System.out.println("Ok 버튼을 클릭했습니다.");
        	}
        }
        
        // Ok 버튼 객체에 ClickListener 구현 객체 주입
        bntOk.setClickListener(new OkListener());
        
        // Ok 버튼 클릭
        btnOk.click();
        
        // Cancel 버튼 객체 생성
        Button btnCancel = new Button();
        
        // Cancel 버튼 클릭 이벤트를 처리할 ClickListener 구현 클래스
        class CancelListener implements Button.ClickListener {
        	@Override
            public void onClick() {
            	System.out.println("Cancel 버튼을 클릭했습니다.");
            }
        }
        
        // Cancel 버튼 객체에 ClickListener 구현 객체 주입
        btnCancel.setClickListener(new CancelListener());
        
        // Cancel 버튼 클릭하기
        btnCancel.Click();
        
    }
}