[Java] 익명 객체

Bam·2024년 3월 8일
0

Java

목록 보기
48/98
post-thumbnail

익명 객체

익명 객체(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("매개변수값 익명 구현 객체가 버튼 클릭");
            }
        });
    }
}

0개의 댓글