본문 바로가기

Java

13 - 3 장 이너 인터페이스

이너 인터페이스 (inner interface)

 - 인터페이스를 클래스 내부에 정의하는 것은 해당 클래스에 의존적인 기능을 수행할 때 

 - 사용자 인터페이스(user interface)의 이벤트 처리에 가장 많이 사용

 ex)

 버튼 클릭을 감지하는 인터페이스는 버튼 클래스 내부에 위치 

 

1. 이너 인터페이스의 정의와 특징 

 

 - 정적 이너 인터페이스만 존재할 수 있음

 - 이너 인터페이스 앞에 static 제어자를 생략하면 컴파일러가 자동으로 추가 

class A {
	//...
    static interface B{
    	void bcd();
     }
}

 - 컴파일시 '아우터 클래스명$이너 인터페이스명.class' 형태로 .class 파일이 생성

 - 자체적으로 객체 생성 불가 

 - 해당 인터페이스를 상속한 자식 클래스를 생성한 후 생성자를 이용해 객체를 생성하거나 

  익명 이너 클래스를 활용해 객체 생성 

 - 인터페이스가 클래스 내부에 존재하므로 객체의 타입을 '아우터 클래스명. 이너 인터페이스명'과 같이 사용

 

 방법 1. 인터페이스 구현 클래스 생성 및 객체 생성

class C implements A.B [
	public void bcd() {}
}

C c = new C();
c.bcd();

방법 2. 익명 이너 클래스 사용

A.B a = new A.B() {
	public void bcd() {}
};
a.bcd();

 

2. 이벤트 처리 기능 작성하기 

 

 - Buttun클래스 

 - 기본적인 사용자 인터페이스 클래스는 API로 제공

 

 - API가 제공하는 버튼의 일반적인 구조

class Button {
	OnClickListener ocl;
    void setOnClickListener(OnClickListener ocl) {
    	this.ocl = ocl;
    }
    interface OnClickListener {
    	public abstract void onClick();
     }
     void Click() {
     	ocl.onClick();
      }
 }

 - 내부에 onClickListener라는 이너 인터페이스 정의 , ocl필드는 이 인터페이스의 타입

 

 - setOnClickListener() 메서드

   - 인터페이스 객체를 입력매개변수로 넘겨 받아 필드를 초기화

 

 - Click() 메서드 

   - 초기화된 필드 객체 내부의 onClick() 메서드를 실행 

 

 - Buttun은 기능은 내부에서 정해지는 것이 아니라 외부에서 정해 입력받는 것

 

개발자 1. 클릭하면 음악 재생

public static void main(String[] args) {
	Button button1 = new Button();
    button1.setOnClickListener(new Button.OnClickListener() {
    	@override
        public void onClick() [
        	System.out.println("개발자1. 음악재생");
         }
    });
    button1.click();
}

개발자 2. 클릭하면 네이버 접속

public static void main(String[] args) {
	Button button2 = new Button();
    button2.setOnClickListener(new Button.OnClickListener() {
    	@Override
        public void onClick() {
        	System.out.println("개발자2.네이버 접속");
        }
    });
    button2.click();
}

 

 - 버튼 객체 생성

 - 익명 이너 클래스를 활용해 onClick()메서드를 오버라이딩

 - 생성한 객체를 setOnClickListener() 메서드의 입력매개변수로 전달한 후 Button 객체의 click()메서드 호출 

 -API는 버튼의 기능을 정의할 수 있는 인터페이스를 클래스 내부에 정의해 사용

 

'Java' 카테고리의 다른 글

14 - 2장 예외 처리  (0) 2023.06.13
14 - 1장 예외  (0) 2023.06.12
13 - 2 장 익명 이너 클래스  (0) 2023.06.05
13 -1 장 이너 클래스  (0) 2023.06.04
12 - 2장 인터페이스  (0) 2023.06.04