Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
Java 익명 내부 클래스 마스터하기
명확한 실전 예제로 Java 익명 내부 클래스 정의, 구현, 활용법을 알아봅니다.
Java에서 클래스가 다른 클래스를 중첩할 수 있습니다—내부 클래스. 이 내부 클래스에 이름이 없으면 익명 내부 클래스라 부릅니다.
익명 내부 클래스는 다른 클래스나 표현식 내에서 인라인으로 정의됩니다. 이름이 없으므로 둘러싼 코드 실행 시에만 생성되어 짧고 일회성 구현에 이상적입니다.
일반적 패턴:
class OuterClass { // 익명 내부 클래스 인스턴스 생성 Type instance = new Type(parameters) { // 오버라이딩된 메서드나 추가 행동 }; }
여기서 Type은 다음 중 하나:
- 익명 클래스가 확장할 슈퍼클래스
- 익명 클래스가 구현할 인터페이스
런타임에 위 문장이 익명 클래스 인스턴스를 구성하며, 선언된 참조 타입을 통해 사용할 수 있습니다.
중요: 선언이 표현식이므로 닫는 세미콜론이 문장을 끝내며 클래스 본문이 아닙니다.
예제 1: 익명 내부 클래스로 클래스 확장
class Polygon { public void display() { System.out.println("Inside the Polygon class"); } } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
출력
Inside an anonymous class.
이 예시에서 익명 클래스는 Polygon을 확장하고 display()를 오버라이딩합니다. createClass() 실행 시 익명 하위 클래스 인스턴스 생성, 오버라이딩된 메서드 호출.
예제 2: 익명 내부 클래스로 인터페이스 구현
interface Polygon { void display(); } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
출력
Inside an anonymous class.
여기서 익명 클래스가 Polygon 인터페이스를 구현하며 필요한 메서드 구현을 간결한 단일 블록으로 제공합니다.
왜 익명 내부 클래스를 사용하는가?
익명 내부 클래스는 짧고 컨텍스트 특화 구현이 필요할 때 빛을 발합니다:
- 이벤트 리스너와 콜백 GUI 프레임워크에서—별도 명명 클래스 없이 행동 쉽게 부착
Runnable을 통한 스레드 생성—run 로직을 인라인으로 작성
- 로컬 어댑터나 래퍼—기존 클래스의 몇 메서드만 오버라이딩
장점:
- 간결성—별도 파일이나 클래스 선언 불필요
- 범위 제어—정의된 곳에서만 클래스 가시적
- 런타임 유연성—필요할 때만 인스턴스 생성
더 크고 재사용 가능한 로직은 명명된 클래스나 람다 표현식(함수형 인터페이스용) 고려로 유지보수성 확보.