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회용 클래스 만들기