💡 익명 클래스는 딱 한 번만 인스턴스를 생성하여 사용하기 위해 선언되는 클래스이다.
일반 클래스는 언제든지 인스턴스를 생성하여 사용할 수 있으나, 어떤 클래스는 딱 한 번만 인스턴스를 생성하기 위해서 선언되는데 이것을 익명 클래스
라고 한다.
이와 같은 일회용 클래스는 주로 인터페이스를 구현하는 클래스일 때가 많으며, 일회용이므로 이름이 필요없기 때문에 익명 클래스(Anonymous Class)라고 한다.
// 선언 방법
인터페이스명 변수명 = new 인터페이스명() {
인터페이스의 메서드 오버라이딩
}
익명 클래스는 위와 같이 선언된다.
// 선언 예제
Messenger anonymousTest = new Messenger() { // 익명 클래스 선언
@Override
public String getMessage() { // 인터페이스 메서드 오버라이딩
return "anonymousTest";
}
@Override
public void setMessage(String msg) { // 인터페이스 메서드 오버라이딩
System.out.println("anonymousTest에서 메시지를 설정합니다: " + msg);
}
};
// Messenger 인터페이스
public interface Messenger {
String getMessage();
void setMessage(String msg);
}
위의 익명 클래스는 Messenger 인터페이스를 구현한다.
new Messenger()
를 통해 익명 클래스의 인스턴스를 힙에 생성하고, Messenger 타입으로 선언된 anonymousTest 참조변수에 주솟값이 저장된다.사용 방법은 일반 클래스와 다르지 않다. 일반 클래스의 인스턴스 생성과 사용 예제와 함께 익명 클래스의 사용 방법을 살펴보자.
// Messenger 인터페이스를 상속하는 GalaxyMessenger 클래스
public class GalaxyMessenger implements Messenger{
public String getMessage() { // Messenger 인터페이스의 메서드 구현
return "galaxy";
}
public void setMessage(String msg) { // Messenger 인터페이스의 메서드 구현
System.out.println("galaxy에서 메시지를 설정합니다 : " + msg);
}
public void changeKeyboard() {
System.out.println("키보드아이콘 터치 후 키보드를 변경합니다.");
}
}
// MessengerTest.java
public class MessengerTest {
public static void main(String[] args) {
/* 일반 클래스의 인스턴스 생성과 사용 */
GalaxyMessenger galaxy = new GalaxyMessenger();
System.out.println(galaxy.getMessage());
galaxy.setMessage("Hi, I'm Galaxy.");
galaxy.changeKeyboard();
/* 익명 클래스의 선언과 사용 */
Messenger anonymousTest = new Messenger() { // 익명 클래스 선언
@Override
public String getMessage() { // 인터페이스 메서드 오버라이딩
return "anonymousTest";
}
@Override
public void setMessage(String msg) { // 인터페이스 메서드 오버라이딩
System.out.println("anonymousTest에서 메시지를 설정합니다: " + msg);
}
};
// 익명 클래스의 멤버 사용
System.out.println(anonymousTest.getMessage());
anonymousTest.setMessage("Have a nice day!");
}
}
new
명령문을 이용하여 인스턴스를 생성하였다.new
명령문을 이용하여 인스턴스를 생성하는데, 이 때 참조타입을 상속하는 인터페이스(혹은 클래스)로 지정해야한다는 것에 유의하자.📔 본 포스팅은 책 ‘처음 해보는 자바 프로그래밍(오정임 저, 루비페이퍼)’을 읽고 정리한 글입니다.