Notice
Recent Posts
Recent Comments
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

익명 클래스(anonymous class) 본문

Java/JAVA2

익명 클래스(anonymous class)

빌드이너프 2023. 6. 19. 06:18

익명 클래스

이름이 없는 일회용 클래스(정의와 생성을 동시에)

(조상 클래스 이름 혹은 구현 인터페이스 이름)

new 조상클래스이름() {
    // 멤버 선언
}

// 또는

new 구현인터페이스이름() {
    // 멤버 선언
}

 

이름이 없는 클래스이기 때문에 조상이름을 대신해서 사용

 

코드

class Anonymous {
    Object iv = new Object() { void method(){} }; // 익명 클래스
    static Object cv = new Object() { void method(){} }; // 익명 클래스
    
    void myMethod() {
        Object lv = new Object() { void method(){} }; // 익명 클래스
    }
}

컴파일 시

내부 클래스이기 때문에 외부 클래스(Anonymous)가 따라옴

익명 클래스이기 때문에 이름이 숫자로 표기됨

 


익명 클래스 아닌 코드(EventHandler)

AWT: Java의 윈도우 프로그래밍

import java.awt.*;
import java.awt.event.*;

class Anonymous {
    public static void main(String[] args) {
        Button b = new Button("Start");
        
        b.addActionListener(new EventHandler());
    }
}

// 보통 1회성 코드, AWT는 보통 내부 클래스로 사용됨
class EventHandler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("ActionEvent occurred");
    }
}

 

익명 클래스 사용

EvnetHandler을 사용하지않고 조상 이름이나 인터페이스 이름(ActionListener) 사용

이름이 없기 때문에 객체를 다시 만들 수 없다(클래스 정의와 생성을 동시에) = 일회용

import java.awt.*;
import java.awt.event.*;

class Anonymous {
    public static void main(String[] args) {
        Button b = new Button("Start");
        
        b.addActionListener(new ActionListener() { // 클래스의 정의와 객체 생성을 동시에
            public void actionPerformed(ActionEvent e) {
                System.out.println("ActionEvent occurred");
            }
        });
    }
}

 

만약 2번 만들게 되면

코드는 같지만 Anonymous.n.class으로 다른 클래스이다

같은 클래스를 2번 사용한 것이 아닌 같은 내용의 클래스를 생성한 것

import java.awt.*;
import java.awt.event.*;

class Anonymous {
    public static void main(String[] args) {
        Button b = new Button("Start");

        b.addActionListener(new ActionListener() { // Anonymous.1.class
            public void actionPerformed(ActionEvent e) {
                System.out.println("ActionEvent occurred");
            }
        });

        b.addActionListener(new ActionListener() { // Anonymous.2.class
            public void actionPerformed(ActionEvent e) {
                System.out.println("ActionEvent occurred");
            }
        });
    }
}