익명 객체(Anonymous Object)
는 말 그대로 이름이 없는 객체입니다. 클래스를 선언하지 않는 다는 점 때문에 객체를 쉽게 만들 수 있다는 장점이 있습니다. 익명 객체는 멤버 변수의 값, 지역 변수값, 매개변수값으로 주로 사용됩니다.
익명 객체는 클래스를 상속했거나 인터페이스를 구현했을 때만 생성할 수 있는데 클래스 상속에서는 익명 자식 객체, 인터페이스 구현에서는 익명 구현 객체라고 구분지어 부르기도 합니다.
익명 자식 객체
는 클래스를 상속받아 생성합니다. new
연산자와 부모 클래스의 생성자를 이용해서 익명 자식 객체를 생성합니다.
new 부모클래스_생성자(매개변수, ...) {
//익명객체 멤버(멤버 변수, 메소드)
}
이렇게 생성된 익명 자식 객체
는 부모의 멤버 변수, 지역 변수, 매개변수의 값으로 활용될 수 있습니다.
익명 자식 객체의 멤버는 해당 중괄호 내부에서만 유효합니다.
다음 코드는 익명 자식 객체를 멤버 변수, 지역 변수, 매개변수 값으로 이용하는 예제입니다.
public class Button { //Button 클래스를 익명 자식 객체로 활용
public void clickButton() {
System.out.println("버튼 클릭");
}
}
public class ButtonSystem {
protected Button button = new Button() { //멤버 변수값 익명 자식 객체
@Override
public void clickButton() {
System.out.println("멤버 변수값 익명 자식 객체가 버튼 클릭");
}
};
public void printMessage1() {
button.clickButton();
}
public void printMessage2() {
Button button = new Button() { //메소드 내부 지역 변수값 익명 자식 객체
@Override
public void clickButton() {
System.out.println("지역 변수값 익명 자식 객체가 버튼 클릭");
}
};
button.clickButton();
}
public void printMessage3(Button button) { //매개변수값 익명 자식 객체를 사용하기 위한 메소드
button.clickButton();
}
}
public class Main {
public static void main(String[] args) {
ButtonSystem buttonSystem = new ButtonSystem();
buttonSystem.printMessage1();
buttonSystem.printMessage2();
buttonSystem.printMessage3(new Button() { //매개변수값 익명 자식 객체
@Override
public void clickButton() {
System.out.println("매개변수값 익명 자식 객체가 버튼 클릭");
}
});
}
}
이번에는 익명 구현 객체
를 알아보겠습니다. 익명 구현 객체
는 인터페이스를 구현해서 생성합니다.
new 인터페이스() {}
마찬가지로 익명 구현 객체
는 인터페이스 타입 멤버 변수, 지역 변수, 매개변수값으로 사용될 수 있습니다.
public interface Button {
void clickButton();
}
public class ButtonSystem {
Button button = new Button() { //멤버 변수값 익명 구현 객체
@Override
public void clickButton() {
System.out.println("멤버 변수값 익명 구현 객체가 버튼 클릭");
}
};
public void printMessage1() {
button.clickButton();
}
public void printMessage2() {
Button button = new Button() { //메소드 내부 지역 변수값 익명 구현 객체
@Override
public void clickButton() {
System.out.println("지역 변수값 익명 구현 객체가 버튼 클릭");
}
};
button.clickButton();
}
public void printMessage3(Button button) { //매개변수값 익명 구현 객체를 사용하기 위한 메소드
button.clickButton();
}
}
public class Main {
public static void main(String[] args) {
ButtonSystem buttonSystem = new ButtonSystem();
buttonSystem.printMessage1();
buttonSystem.printMessage2();
buttonSystem.printMessage3(new Button() { //매개변수값 익명 구현 객체
@Override
public void clickButton() {
System.out.println("매개변수값 익명 구현 객체가 버튼 클릭");
}
});
}
}