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의 끝
}
아래 예제는 위 예제의 익명 클래스를 이용해서 변경한 것이다. 먼저 두 개의 독립된 클래스를 작성한 다음에,
익명 클래스를 이용하여 변경하면 보다 쉽게 코드를 작성할 수 있을 것이다.
위 두가지 예제 상속 클래스와 인터페이스의 구현 클래스의 예제를 잘 살펴보고 적용해보자.