람다 VS 익명 클래스

정다운·2025년 5월 17일

고급자바

목록 보기
5/7

람다 VS 익명 클래스 무엇이 다를까?

자바 개발을 하다 보면 익명 클래스와 람다 표현식 중 어떤 걸 써야 할지 고민될 때가 있죠.
두 문법은 비슷해 보이지만, 의외로 차이가 뚜렷합니다.
이번 포스팅에서는 자바의 두 대표 단축 문법인 람다(Lambda)익명 클래스(Anonymous Class)를 비교해보겠습니다.

1. 문법 차이

익명 클래스

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println("클릭!");
    }
});

new 인터페이스명()으로 바로 객체 생성

메서드 오버라이딩 필요

문법이 길다

람다 표현식

button.setOnClickListener(v -> System.out.println("클릭!"));

-> 연산자 사용

함수형 인터페이스에만 사용 가능

짧고 가독성이 좋음

2. 코드의 간결함

람다는 명확히 간결하고 직관적입니다.
반면, 익명 클래스는 코드가 장황하고 가독성이 떨어질 수 있습니다.

3. this의 의미

구분 this 키워드가 가리키는 대상
익명 클래스 익명 클래스 자신
람다 람다를 선언한 외부 클래스

4. 상속과 상태 관리

익명 클래스

필드나 메서드를 가질 수 있음

상태를 유지 가능

여러 메서드를 가진 인터페이스 구현 가능

람다

함수형 인터페이스만 사용 가능 (메서드 1개)

필드나 상태 없음 (순수 함수 느낌)

5. 호환성 & 동작 원리

구분 작동 방식
익명 클래스 컴파일 시 별도 클래스 파일 생성 (예: OuterClass$1.class)
람다 invokeDynamic 사용 → 런타임에 코드 연결

즉, 람다는 가볍고 동적, 익명 클래스는 정적이고 무겁다고 볼 수 있습니다.

6. 변수 캡처 규칙 (Capturing)

둘 다 외부 지역 변수는 final 혹은 사실상 final(값 변경 안됨)만 접근 가능

바뀌는 값은 참조 불가

int a = 10; // OK
int b = 20; b++; // ❌ 캡처 불가

7. 언제 어떤 걸 써야 할까?

상황 추천 문법
단순한 콜백 or 이벤트 리스너 람다
여러 메서드를 구현해야 할 때 익명 클래스
상태를 유지해야 할 때 익명 클래스
자바 8 이전 버전 익명 클래스

마무리 요약

결론

람다는 자바 8의 대표적인 함수형 기능으로, 익명 클래스를 대체하는 현대적인 방식입니다.
다만 여전히 복잡한 인터페이스 구현이나 상태 유지가 필요한 상황에서는 익명 클래스가 유용할 수 있습니다.

상황에 따라 적절히 선택하면서 코드를 더 깔끔하고 효율적으로 만들어보세요!

0개의 댓글