익명클래스

익명클래스

익명객체는 이름이 없는 객체를 말한다. 이는 단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다. UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 많이 활용된다.
익명클래스는 생성자를 선언할 수 없다는 특징이 있으며 클래스가 재사용되지 않을 때 사용하는것이 좋다.
익명 자식 객체에 새롭게 정의된 필드와 메소드는 익명자식 객체 내부에서만 사용되고, 외부에서는 필드와 메소드에 접근할 수 없다.

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
44
public class Person {
void wake( ) {
System.out.println("7시 인남");
}
}


public class Annoymous {

//필드 초기값으로 대입
Person field = new Person() {
void work( ) {
System.out.println("출근~");
}

@Override
void wake( ) {

System.out.println("6시 인남");
work( );
}
};

void method1( ) {
//로컬 변수값으로 대입
Person localVar = new Person( ) {
void walk( ) {
System.out.println("산책 고고");
}

@Override
void wake( ) {
System.out.println("7시에 인남");
walk( );
}
};
//로컬변수 사용
localVar.wake( );
}

void method2(Person person) {
person.wake();
}
}

위에 정의한 클래스를 활용해보자

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
public class AnonymousExample {
public static void main(String[] args) {
Anoymous anony = new Anonymous();

//익명객체 필드 사용
anony.field.wake();

//anony.filed.walk(); 는 에러가 발생한다. 이유가 뭘까?
//익명자식 객체는 부모 타입 변수에 대입되므로 부모타입에 선언된 것만 사용할 수 있기 때문인다.

//익명 객체 로컬변수 사용
anony.method1();

//익명 객체 매개값 사용
anony.method2(
new Person( ) {
void study( ) {
System.out.println("공부~");
}

@Override
void wake( ) {
System.out.println("8시에인남");
study( );
}
}
);
}
}

Share