티스토리 뷰

[java 25강] 익명 클래스(Anonymous Class)



이번 강의에서는 익명 클래스(Anonymous Class) 에 대해서 알아보겠습니다.

익명 클래스는 이름없는 클래스입니다.

 자바에서 그게 가능하냐고요? 가능합니다.

클래스를 만들어서 인스턴스(클래스를 생성하여 사용하는것)하여 사용하잖아요?

test2 A = new test2();

근대 앞에 형식과 클래스 명칭을 정해주는 것을 빼면.... 그게 바로 익명클래스 입니다.

new test2();

이렇게 생성만하여 사용하는것이죠.

이렇게 생성만 하여 사용하기 때문에 당연히 명칭이 없습니다.

명칭이 없기때문에 만들어진것을 불러서 사용할수가 없습니다.

결론은 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
package test25;
 
public class test25 {
    public static void name() {
        test2 A = new test2();
        A.setCB(new test1());
        A.printCB();
    }
}
 
class test1{
    int a = 0;
    int b = 0;
    
    public test1(){
        a = 3;
        b = 4;
    }
}
 
class test2{
    int c = 0;
    int d = 0;
    
    public void setCB(test1 o) {
        c = o.a;
        d = o.b;
    }
    
    public void printCB() {
        System.out.println("int c = "+c+" int d = " + d);
    }
    
}
 
cs


실행결과



예제 해설


test1 클래스와 test2 클래스를 만들어 주었습니다.

test1 클래스는 익명클래스 목적으로 만들어 주었습니다.

test1 클래스에 변수 a,b 를 만들어주었고 생성자로 3과 4가 각각 들어가도록 만들었습니다.

test2 클래스는 변수 c,d 를 만들어주고 setCB, printCB 메소드를 만들어 주었습니다.


public void setCB(test1 o) {
        c = o.a;
        d = o.b;
    }

setCB 메소드에서는..
test1 라는 클래스를 받아 c 변수에는 test1 의 변수 a의 값을 넣어주었고...
d 변수에는 test1 의 변수 b의 값을 넣어주었습니다.


public void printCB() {
        System.out.println("int c = "+c+" int d = " + d);
    }


printCB 메소드에서는 변수 c 와 d 의 값을 출력할수 있게 만들었습니다.


public class test25 {
    public static void name() {
        test2 A = new test2();
        A.setCB(new test1());
        A.printCB();
    }
}

우선 test2 의 클래스를 A 라고 만들어 주었습니다.

그다음 test2 의 setCB 메소드에 익명클래스로 생성만하여 값을 넘겨주어 실행하였고..

test2 클래스 printCB 메소드를 실행하여 변수 c,d 의 값을 확인할수 있었습니다.


이렇게 익명클래스를 사용하는 문법? 정도를 알아보았습니다.

익명클래스는 오버라이드가 가능한 메소드들을 만들어 자주 사용됩니다.

음.. 이벤트적인 요소? 같은것을 재정의(오버라이드) 할수 있는 메소드들이 모여있는 클레스를 만들어 1회성으로 많이 사용합니다.


이상으로 강의를 마치도록 하겠습니다. 수고하셨습니다^^



댓글