[Java] 자바 #42, 익명객체(Anonymous Object) 개념 및 예제

익명 객체 , Anonymous Object

 - 익명 클래스, Anonymous Class

 - 클래스를 정의하지 않고 객체를 정의하는 방법 > 1회용 클래스 사용 > 재사용이 불가능한 클래스(객체를 1번 만드는 용도)

 - 이벤트 객체, 스레드 개체, 람다식, 스트림 등에서 사용.

익맹객체 만드는 방법 + 사용예시


1. 부모 클래스를 상속한 익명객체를 만드는 방법.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class AAA{ //부모클래스
    public int a =10;
    public void check() {
        System.out.println("a : "+this.a);
    }
}
class BBB extends AAA{
    public int b =20;
    
    @Override
    public void check() {
        System.out.println("b : "+this.b);
    }
}
class CCC { //제 3자 클래스
    
    public AAA a1; //부모클래스(AAA) 인스턴스
    public AAA a2; //자식클래스(BBB) 인스턴스(업캐스팅)
    public AAA a3; //자식클래스(BBB) 인스턴스(업캐스팅)
    
    public CCC() {
        this.a1= new AAA();
        //BBB클래스의 객체가 전체 프로젝트를 통틀어 유일하게 
        //딱 이곳 1번만 인스턴스화. 다른소스에서는 절대로 생성자 선언이 이루어지지않는 경우
        //this.a2= new BBB();
        
        //BBB클래스로 만들었던 객체를 클래스 없이 익명객체로 만드는 방법.
        this.a3= new AAA() {
            //익명 객체의 본문(Body)
            public int b =40;
            @Override
            public void check() {
                System.out.println("b : "+this.b);
            }
        };
    }
    
    public void check() {
        this.a1.check();
        //this.a2.check();
        this.a3.check();
    }
}
cs


이러한 AAA, BBB, CCC클래스가 정의되어있을 때!


CCC c = new CCC();

c.check();

DDD d1= new EEE();

d1.check();

//new 부모클래스{자식 익명 객체 구현부}

//new 인터페이스{자식 익명 객체 구현부}

DDD d2 = new DDD() {

@Override

public void check() {

System.out.println("익명객체~");

}

};

d2.check();



2. 인터페이스를 구현하여 익명객체를 만드는 방법


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
interface DDD{
    void check();
}
class EEE implements DDD{
    @Override
    public void check() {
        System.out.println("인터페이스를 구현한 실명 자식클래스.EEE");
    }
}
 
interface FFF{
    String getData();
}
class GGG implements FFF{
    @Override
    public String getData() {
        return "실명클래스";
    }
}
 
class HHH{
    public void test(FFF f) {
        System.out.println("결과 : "+f.getData());
    }
}
cs


//만드는 횟수가 자주 반복되지 않을 때...

FFF f = new GGG();

HHH h = new HHH();

h.test(f);

h.test(new FFF() {

@Override

public String getData() {

return "익명객체";

}

});

댓글

Designed by JB FACTORY