Java

중첩 인터페이스

공부처음하는사람 2024. 7. 6. 01:06

 

중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다.

인터페이스를 클래스 내부에서 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현객체를 만들기 위함이다.

 

중첩 인터페이스는 암시적으로 static이므로 static을 생략해도 항상 객체 없이 인터페이스를 사용할 수 있다.

 

중첩 인터페이스는 안드로이드와 같은 UI 프로그램에서 이벤트를 처리할 목적으로 많이 활용된다.

예를 들어 버튼을 클릭했을 때 이벤트를 처리할 객체는 중첩 인터페이스를 구현해서 만든다.

 

package ch09.sec06.ex01;

public class Button {
    // 정적 중첩 인터페이스
    public static interface ClickListener {
        // 추상 메서드
        void onClick();
    }
}

 

 

setter를 사용해 외부에서 구현객체를 필드에 저장할 수 있도록 코드 작성

 

package ch09.sec06.ex02;

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();
    }
}

 

package ch09.sec06.ex02;

public class ButtonEx {
    public static void main(String[] args) {

        Button btnOk = new Button();

        // OK 버튼 클릭 이벤트를 처리할 ClickListener 구현 클래스
        class OkListener implements Button.ClickListener {
            @Override
            public void onClick() {
                System.out.println("ok 버튼을 클릭했습니다.");
            }
        }

        // Ok 버튼 객체에 ClickListener 구현 객체 주입
        btnOk.setClickListener(new OkListener());

        btnOk.click();

        Button btnCancel = new Button();

        class CancelListener implements Button.ClickListener {
            @Override
            public void onClick() {
                System.out.println("cancel button 클릭");
            }
        }

        btnCancel.setClickListener(new CancelListener());

        btnCancel.click();
    }
}

 

OkListener,  CancelListener는 이벤트를 처리할 구현 클래스이다.

onClick() 메소드를 오버라이딩해 버튼이 클릭되었을 때 해야할 일을 코딩한다.

 

btnOk.setClickListener(new OkListener());

btnCancel.setClickListener(new CancelListener()); 코드는 버튼이 앞으로 클릭되었을 때 처리를 담당할

ClickListener 구현객체를 설정하는 코드이다.

 

이 코드는 onClick 메소드가 호출되면 버튼에 설정된 ClickListener 구현 객체의 onClick 메소드가 실행되는 코드이다.

버튼에 어떤 ClickListener 구현객체가 설정되었냐에 따라 실행결과가 달라지는것이 핵심이다. (다형성)

'Java' 카테고리의 다른 글

예외  (1) 2024.07.09
익명 객체  (0) 2024.07.06
로컬 클래스 / 바깥 클래스  (0) 2024.07.06
중첩 클래스 / 인스턴스 멤버 클래스 / 정적 멤버 클래스  (0) 2024.07.05
인터페이스 - private 메소드  (0) 2024.07.01