앱 만들기/안드로이드

Java - 중첩 인터페이스가 필요한 이유

나도 처음이야 2022. 4. 22.

자바에서 중첩 인터페이스는 주로, 이벤트 구현 목적으로 사용된다.

중첩 인터페이스는 멤버 인스턴스와 정적 멤버 인스턴스로 나뉠 수 있는데

안드로이드 및 자바의 UI 이벤트 구현을 위해서는 주로 정적 멤버 인스턴스 방식이 많이 사용된다.

사용법을 알아보자.

 

버튼을 눌렀을때 반응하는 이벤트 클릭 리스너를 구현하고자 하면,

버튼은 하기처럼 구현이 된다. 실제 안드로이드나 버튼 클래스의 내부는 이런 식으로 정적 멤버 인터페이스가 정의되어있다. Open API Document를 참조하면 알 수 있다. (하기 링크 참조 바람)

public class Button {	
	//인터페이스 타입 필드
	OnClickListener listener;
	
	//중첩 인터페이스 
	static interface OnClickListener{
		void OnClick();
	}
 	   // 인터페이스 타입 필드 세팅 
	void setOnClickListener(OnClickListener listener) {
		this.listener = listener;
	}
 	   // 버튼 터치시 동작구현 함수
	void touch() {
		listener.OnClick();		
	}   	
}

버튼이 전화 버튼이고, 전화 받아라는 메시지를 보여주고 싶다면

Button.OnclickListener 인터페이스를 구현한다. 바로 정적 멤버 인터페이 스기에 이렇게 접근이 가능하다.

그리고, abstract 함수인 Onclick()를 재정의(오버라이딩) 해준다.

public class CallListener implements Button.OnClickListener {

	@Override
	public void OnClick() {
		// TODO Auto-generated method stub
		System.out.println("Get a call");		
	}	
}

메시지 버튼 역시 동일하게 구현해본다.

public class MessageListener implements Button.OnClickListener {

	@Override
	public void OnClick() {
		// TODO Auto-generated method stub
		System.out.println("Get a message");
	}	
}

전화 , 메시지 버튼 두개에 대한 이벤트를 처리하는 클래스를 만들었다.

그럼 메인함수에서 실제 동작을 시켜본다.

public class InnerInterfaceTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Button btn = new Button();
		
		btn.setOnClickListener(new CallListener());
		btn.touch();
		btn.setOnClickListener(new MessageListener());	
		btn.touch();		
	}
}

버튼 객체를 생성하고,

버튼의 Setter() 함수를 통해서 인터페이스 필드의 값을 각각 전화, 메시지 버튼의 객체로 설정해준다.

위 코드는 하기와 같은 의미이며, 하기 처럼 코딩도 가능하다.

 

Button.OnClickListener listener  = new CallListener();

Button.OnClickListener listener  = new CallListener();

 

인터페이스를 구현한 객체는 자동형변환이 되어 인터페이스 타입으로 대입이 가능하다.

즉, 다형성으로 해당 객체의 오버라이딩 된 객체가 불려진다.

결과 값은 하기와 같다.

 

Get a call
Get a message

 

자바나 안드로이드에서 중첩 인터페이스는 UI 이벤트 구현으로 많이 사용되며,

자동형 변환으로 인터페이스 타입에 구현된 객체를 대입 가능하다.

구현된 객체의 재정의 된 함수가 불려지기에 상황에 맞는 이벤트 구현이 용의 하다. 

이것을 다형성이라고 부른다. (매개변수 타입으로 구현된 객체를 받았기에 매개변수 다형성이라고 부름)

감사합니다.

 

https://developer.android.com/reference/android/view/View.OnClickListener

 

View.OnClickListener  |  Android Developers

 

developer.android.com

 

https://soo0100.tistory.com/1798

 

익명클래스 는 언제 사용되나요?

https://soo0100.tistory.com/1794 Java - 중첩 인터페이스가 필요한 이유 자바에서 중첩 인터페이스는 주로, 이벤트 구현 목적으로 사용된다. 중첩 인터페이스는 멤버 인스턴스와 정적 멤버 인스턴스로 나

soo0100.tistory.com

 

반응형

댓글