Post

[Java] 익명 클래스(Anonymous Class)

인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 글입니다.

익명 클래스란?


익명 클래스(Anonymous Class)는 이름이 없는 클래스이며, 일회성으로 사용되는 객체를 생성할 때 사용되며, 보통 인터페이스나 추상 클래스의 메소드를 재정의할 때 자주 쓰인다.

예제


onClickListener.java

1
2
3
public interface OnClickListener {
    void onClick();
}

Button.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Button {
    String name;
    public Button(String name) {
        this.name = name;
    }

    //  ⭐️ 인터페이스를 상속한 클래스 자료형
    private OnClickListener onClickListener;
    public void setOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    public void func() {
        onClickListener.onClick();
    }
}

Main.java

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
32
33
34
35
36
37
38
39
Button button1 = new Button("Enter");
Button button2 = new Button("CapsLock");
Button button3 = new Button("ShutDown");

button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick() {
        System.out.println("줄바꿈");
        System.out.println("커서를 다음 줄에 위치");
    }

    // ⚠️ 새로운 메소드
    public void onDblClick() {
        System.out.println("2번 줄바꿈");
    }
});

button2.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick() {
        System.out.println("기본입력 대소문자 전환");
    }
});

button3.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick() {
        System.out.println("작업 자동 저장");
        System.out.println("프로그램 종료");
    }
})

// ⚠️ 불가
// 💡 익명클래스의 인스턴스는 상속받거나 오버라이드 된 메소드만 호출 가능
// button1.onDblClick();

for (Button button : new Button[] { button1, button2, button3 }) {
    button.func();
}