Java/자바 정리

[ 간단 정리 88+ ] 익명 객체 vs 람다식 vs 내부 클래스 ㅡ 차이점 비교!!

코딩하는냥이 2025. 5. 12. 12:48
반응형
항목 익명 객체 람다식 내부 클래스
🌟 정의 이름 없는 클래스를 즉석에서 구현 함수형 인터페이스를 간단히 표현 클래스 안에 정의된 또 다른 클래스
🧱 형태 new 인터페이스() { ... } (매개변수) -> { 코드 } class Inner { ... }
🧠 목적 일회성 클래스 구현 (보통 인터페이스나 추상 클래스) 함수처럼 간단한 코드 전달 (자바 8 이상) 외부 클래스와 밀접한 관계가 있는 구조적 코드
📋 제한 생성자 사용 불가, 클래스 이름 없음 함수형 인터페이스만 가능 static 여부에 따라 인스턴스 필요 유무 다름
📦 코드 양 중간 (중괄호 + 오버라이드 필요) 아주 간결 (함수처럼 표현 가능) 길어질 수 있음 (정식 클래스니까요)
🎯 사용 예 Runnable, ActionListener, 콜백 등 Comparator, Stream 처리 등 UI 이벤트, 구조적 묶음 클래스
📚 버전 제한 자바 1.1부터 가능 자바 8 이상만 가능 자바 초창기부터 존재

✏️ 코드 예제 비교

✅ 익명 객체

Runnable r = new Runnable() {
    public void run() {
        System.out.println("익명 객체!");
    }
};
r.run();

✅ 람다식

Runnable r = () -> System.out.println("람다식!");
r.run();

✅ 내부 클래스

public class Outer {
    class Inner {
        void hello() {
            System.out.println("내부 클래스!");
        }
    }
}

💡 간단 요약

상황 추천 방식
한 번 쓰는 간단한 인터페이스 구현 ✅ 익명 객체
함수형처럼 표현하고 싶다 ✅ 람다식
클래스 내부에서 기능을 나눠 구조적으로 관리하고 싶다 ✅ 내부 클래스

즉, 람다식은 익명 객체의 축약 버전이라고 볼 수 있습니다.
내부 클래스는 구조적인 목적에 더 가깝습니다.
각각 장단점이 있어서, 상황에 맞게 고르는 것이 중요합니다.

😆 연관된 글

80. 인터페이스와 람다식 – 익명 객체 대신 사용하는 간결한 표현

81. 인스턴스 멤버 클래스 – 클래스 안에 클래스가 있다고요?

82. 정적(static) 멤버 클래스 – 외부 객체 없이도 작동하는 중첩 클래스

83. 정적 멤버 클래스의 독립성 – 외부 인스턴스 없이 자유롭게 활용

84. 정적 멤버 클래스의 활용 – 인스턴스와 static 멤버를 모두 가진 클래스

85. 로컬 클래스(Local Class) – 메서드 안에 클래스가?!

86. 인스턴스 멤버 클래스 vs 정적 멤버 클래스 – 접근 가능한 멤버는?

87. 내부 클래스에서 외부 클래스 참조하기 – this vs A.this

88. 이벤트 처리를 위한 로컬 클래스 구현 – 콜백 메커니즘 만들기

89. 익명 구현 객체 – 한 번만 쓰고 버리는 1회용 클래스 만들기

90. 인터페이스 기반 익명 구현 객체 – 직접 클래스 만들지 않아도 OK

91. 람다식으로 더 간결하게! 인터페이스 구현의 진화