익명 클래스:
클래스를 명시적으로 정의하지 않고, 필요한 클래스를 인터페이스나 추상 클래스를 구현하거나 확장하여 생성하는 방법으로 일회성으로 사용되는 클래스를 간단하게 작성할 때 유용하다.
먼저 추상 클래스를 사용하여 익명 클래스를 생성하고, cook() 메소드를 구현하는 예제를 보자.
abstract class HomeMadeBurger {
public abstract void cook();
}
public class AnonymousClassExample {
public static void main(String[] args) {
// 엄마가 만든 버거 객체를 가져와서 cook 메소드 호출
HomeMadeBurger momMadeBurger = getMomMadeBurger();
momMadeBurger.cook();
// 동생이 만든 버거 객체를 가져와서 cook 메소드 호출
HomeMadeBurger broMadeBurger = getBroMadeBurger();
broMadeBurger.cook();
}
// 엄마가 만든 버거를 반환하는 메소드
private static HomeMadeBurger getMomMadeBurger() {
return new HomeMadeBurger() {
@Override
public void cook() {
System.out.println("집에서 만드는 엄마표 수제 버거");
System.out.println("재료: 빵, 소고기패티, 해시브라운, 양상추, 마요네즈, 피클");
}
};
}
// 동생이 만든 버거를 반환하는 메소드
public static HomeMadeBurger getBroMadeBurger() {
return new HomeMadeBurger() {
@Override
public void cook() {
System.out.println("집에서 만드는 동생표 군대리아");
System.out.println("재료: 빵, 치킨패티, 양배추 샐러드, 딸기잼, 치즈, 삶은 계란");
}
};
}
}
getMomMadeBurger() 메소드를 호출하여 엄마가 만든 버거와 동생이 만든 버거를 얻어오고 각각의 익명 클래스는 cook() 메소드를 구현하고 있으며, 호출할 때 해당 메소드를 실행합니다.
다음으로 간단한 인터페이스를 정의하고, 그 인터페이스를 구현하는 익명 클래스를 생성하여 메시지를 출력하는 예제를 보겠습니다.
interface Greeting {
void greet();
}
public class AnonymousClassExample {
public static void main(String[] args) {
// 익명 클래스를 사용하여 Greeting 인터페이스의 구현체 생성
Greeting anonymousGreeting = new Greeting() {
@Override
public void greet() {
System.out.println("안녕하세요!");
}
};
// 익명 클래스의 메소드 호출
anonymousGreeting.greet();
}
}
익명 클래스의 특징으로는
- 익명 클래스는 클래스 이름이 없습니다. 즉, 이름 없이 객체를 생성합니다.
- 일회성으로 사용할 때 유용하며, 클래스를 따로 정의할 필요가 없습니다.
- 주로 인터페이스나 추상 클래스의 구현체를 만들 때 활용됩니다. { } 내에서 메소드를 오버라이딩하거나 필드를 추가할 수 있습니다. 한 번만 사용할 수 있으며, 재사용이 불가능합니다.
'Java' 카테고리의 다른 글
| [동시성 문제] - HashMap / ConcurrentHashMap (0) | 2024.08.25 |
|---|---|
| Java (람다와 함수 인터페이스) (1) | 2024.01.07 |
| Java (컬렉션 프레임워크) (0) | 2024.01.06 |
| Java (제네릭스) (1) | 2024.01.04 |
| Java (추상 클래스와 인터페이스, 의존성 주입) (2) | 2024.01.03 |