익명 이너 클래스란?
- 단어 그대로 '이름을 가지지 않은 클래스'를 의미한다.
- 하나의 객체만을 생성하는 일회용 클래스다.
- 익명 이너 클래스를 사용하면 코드를 간결화할 수 있다.
- (클래스 작성 + 해당 클래스 타입의 객체 생성)를 익명 이너 클래스 하나로 해결할 수 있다.
- 여러 개의 객체를 생성해야 하는 상황에서는 사용하지 않는 편이 좋다.
- 일회용 클래스이기 때문에 객체를 생성할 때마다 기능을 구현해야 하기 때문이다.
// 익명 이너 클래스
new 클래스명() {
// 기능 구현
};
new 인터페이스() {
// 기능 구현
};
// 세미콜론(;) 필수
익명 이너 클래스 사용 예시
인터 페이스 객체 생성
public class Main {
public static void main(String[] args) {
// 익명 이너 클래스를 이용하여 인터페이스 인스턴스를 생성
A a = new A(){
@Override
public void abc() {
System.out.println("익명 이너 클래스");
}
};
a.abc(); // "익명 이너 클래스" 출력
}
}
// 인터페이스 생성
interface A {
public void abc();
}
/*
원래라면 인터페이스를 구현한 하위 클래스를 생성해서 abc() 메서드를 오버라이딩을 통해 구현해야 사용할 수 있다.
하지만 익명 이너 클래스를 이용하면 아래와 같은 과정을 생략할 수 있다.
class B implements A {
@Override
public void abc() {
// 기능 구현
}
}
/*
입력매개변수를 익명 이너클래스로 전달
public class Main {
public static void main(String[] args) {
// 익명 이너 클래스를 이용하여 인터페이스 인스턴스를 생성
B b = new B(new A() {
@Override
public void abc() {
System.out.println("오버라이딩");
}
});
/*
원래라면 인터페이스 A를 구현한 하위 클래스의 인스턴스를 생성 후 B() 생성자의 매개변수로
전달해야 B 클래스의 인스턴스를 생성할 수 있다.
하지만 익명 이너 클래스를 위와 같이 활용하면 생략할 수 있다.
*/
b.bcd(); // "오버라이딩" 출력
}
}
// 인터페이스 생성
interface A {
public void abc();
}
class B {
private A a;
// 생성자의 매개변수를 통해 A클래스의 인스턴스를 전달받음.
public B(A a) {
this.a = a;
}
// 메서드를 선언하여 A 인스턴스의 메소드를 호출함.
public void bcd() {
a.abc();
}
}