반응형
package nesting_interface_class.nesting_interface;

public class Button {
	
	OnClickListener listener; // 인터페이스 타입 필드
	
	void setOnClickListner(OnClickListener listener) {
		this.listener = listener;
	}

	void touch() {
		listener.onClick();
	}
	
	interface OnClickListener{ // 중첩 인터페이스
		void onClick();
	}
}
package nesting_interface_class.nesting_interface;

public class CallListener implements Button.OnClickListener{
	
	@Override
	public void onClick() {
		System.out.println("전화를 겁니다.");
	}
}​
package nesting_interface_class.nesting_interface;

public class MessageListener implements Button.OnClickListener{

	@Override
	public void onClick() {
		System.out.println("메시지를 보냅니다.");
	}
}
package nesting_interface_class.nesting_interface;

public class ButtonExample {

	public static void main(String[] args) {
		
		Button btn = new Button();
		
		btn.setOnClickListner(new CallListener());
		btn.touch();
		
		btn.setOnClickListner(new MessageListener());
		btn.touch();
	}

}

 

클래스 내부안에 선언한 인터페이스
주로 UI프로그래밍에서 이벤트 처리할 목적으로 사용 됩니다.

Button 이라는 클래스 안에 OnClickListener라는 인터페이스가 있고 무조건 구현해야하는 onClick 메소드가 있습니다.

 

void touch() 와 void setOnClickListener는 listener라고 선언한 인터페이스 타입 필드에 값이 들어갔을 때 

사용할 메소드입니다.

 

btn.setOnClickListner(new CallListener());
btn.setOnClickListner(new MessageListener());

이렇게 인터페이스를 상속받은 클래스를 넣는 것입니다. 그러면 각각 클래스에서 구현한 interface부분 메소드

다르게 출력이 되는 것입니다.

 

 

반응형