JAVA의 정석

익명 클래스 (anonymous class)

499.token.required 2024. 1. 28. 17:13

익명 클래스는 말 그대로 이름이 없는 클래스를 말한다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고

 

오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.

 

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

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

 

 

이름이 없기 때문에 생성자도 가질 수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에

 

하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다. 오로지 단 하나의 클래스를 상속

 

받거나 단 하나의 인터페이스만 구현할 수 있다.

 

다음은 인스턴스 클래스를 익명 클래스로 바꾸는 연습 예제이다.

 

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

    void myMethod(){
        Object lv = new Object(){void method(){}}; // 익명 클래스
    }

}

 

이 예제를 컴파일 하면 다음과 같이 4개의 클래스 파일이 생성된다.

 

Ex7_17.class

Ex7_17$1.class // 익명 클래스

Ex7_17$2.class // 익명 클래스 

Ex7_17$3.class // 익명 클래스

 

 

 

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

public class Ex7_18 {
    public static void main(String[] args) {
        Button b = new Button ("Start");
        b.addActionListener(new EventHandler());
    }
    static class EventHandler implements ActionListener { // main 밖 메서드는 static class 까먹지 말자 !
        public void actionPerformed(ActionEvent e) {
            System.out.println("ActionEvent occured");
        }
    }
    
}

 

 

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

public class Ex7_18 {
    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!!!");
            }
        } // 익명 클래스의 끝
        );
    } // main의 끝
}

 

 

아래 예제는 위 예제의 익명 클래스를 이용해서 변경한 것이다. 먼저 두 개의 독립된 클래스를 작성한 다음에,

 

익명 클래스를 이용하여 변경하면 보다 쉽게  코드를 작성할 수 있을 것이다. 

 

위 두가지 예제 상속 클래스와 인터페이스의 구현 클래스의 예제를 잘 살펴보고 적용해보자.