티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.


중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말합니다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위함입니다. 특히 UI 프로그래밍에서 이벤트를 처리할 목적으로 많이 활용됩니다.

class A
{
	interface I
	{
		void method();
	}
}

예를 들어 Button을 클릭했을 때 이벤트를 처리하는 객체를 받고 싶다고 가정해 보겠습니다. 그렇다고 아무 객체나 받으면 안 되고, Button 내부에 선언된 중첩 인터페이스를 구현한 객체만 받아야 한다면 다음과 같이 Button 클래스를 선언하면 됩니다.

public class Button
{
	//인터페이스 타입 필드
	OnClickListener listener;    

	//메서드
	void setOnClickListener(OnClickListener listener)
	{
		this.listener = listener;
	}

	//메서드
	void touch()
	{
		listener.onClick();
	}
	
	//중첩 인터페이스
	interface OnClickListener
	{
		void onClick();
	}
}

위 내용을 보면 중첩 인터페이스(OnClickListener) 타입으로 필드(listener)를 선언하고 Setter 메서드(setOnClickListener())로 구현 객체를 받아 필드에 대입합니다. 버튼 이벤트가 발생했을 때(touch() 메서드가 호출되었을 때), 인터페이스를 통해 구현 객체의 메서드를 호출합니다. 다음은 Button의 중첩 인터페이스인 OnClickListener를 구현한 두 개의 클래스를 보여줍니다.

public class CallListener implements Button.OnClickListener
{
	@Override
	public void onClick()
	{
		System.out.println("전화를 겁니다.");
	}
}
public class MessageListener implements Button.OnClickListener
{
	@Override
	public void onClick()
	{
		System.out.println("메세지를 보냅니다.");
	}
}

다음은 버튼을 클릭했을 때 두 가지 방법으로 이벤트를 처리하는 방법을 보여줍니다. 어떤 구현 객체를 생성해서 Button 객체의 setOnClickListener() 메서드로 세팅하느냐에 따라서 Button의 touch() 메서드의 실행 결과가 달라집니다.

//exam00.java
package chapter00.exam00;

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

/*
실행결과

전화를 겁니다.
메시지를 보냅니다.

*/

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함