1. 익명 클래스 (Anonymous Class)
1) 익명 클래스란?
- 클래스 이름 없이 선언과 동시에 객체를 생성하여 사용하는 클래스.
- 인터페이스나 추상 클래스를 즉석에서 구현하거나, 기존 클래스를 확장할 때 사용.
- Java 8 이전에는 익명 클래스를 주로 사용했으나, 이후 람다식으로 대체되는 경우가 많음.
2) 익명 클래스 특징
- 인터페이스나 추상 클래스를 구현할 때 주로 사용.
- 선언과 동시에 객체를 생성하므로 간결하지만, 가독성이 떨어질 수 있음.
- 객체 이름이 없으므로 재사용 불가.
3) 익명 클래스 예제
interface Inter {
void display();
}
abstract class AbstractClass {
abstract void abstractMethod();
}
public class AnonymousClassExample {
public static void main(String[] args) {
Inter inter = new Inter() {
@Override
public void display() {
System.out.println("익명 클래스: 인터페이스 구현");
}
};
inter.display();
AbstractClass abstractObj = new AbstractClass() {
@Override
void abstractMethod() {
System.out.println("익명 클래스: 추상 클래스 구현");
}
};
abstractObj.abstractMethod();
}
}
2. 람다식 (Lambda Expression)
1) 람다식이란?
- 함수형 프로그래밍을 지원하기 위해 도입된 문법(Java 8 이상).
- 익명 클래스를 간결하게 표현하는 방식으로, 함수형 인터페이스에서만 사용 가능.
2) 함수형 인터페이스
- 추상 메서드가 단 하나만 존재하는 인터페이스.
@FunctionalInterface 어노테이션을 사용하여 명시적으로 지정 가능.
3) 람다식 기본 문법
(parameters) -> { body }
- 파라미터: 메서드의 매개변수.
- 화살표 연산자 (
>): 파라미터와 메서드 본문을 구분.
- 본문: 실행할 코드 블록.
4) 람다식 예제
@FunctionalInterface
interface Inter {
void display();
}
public class LambdaExample {
public static void main(String[] args) {
Inter inter = () -> System.out.println("람다식: 인터페이스 구현");
inter.display();
}
}
3. 익명 클래스 vs 람다식
| 구분 | 익명 클래스 | 람다식 |
|---|
| 문법 | 복잡함 | 간결함 |
| 사용 가능 대상 | 모든 클래스 및 인터페이스 | 함수형 인터페이스 |
| 가독성 | 코드가 길어져 가독성이 낮음 | 코드가 간결해 가독성이 높음 |
| 추상 메서드 수 | 제한 없음 | 추상 메서드가 1개인 함수형 인터페이스만 사용 가능 |
| 재사용성 | 클래스 재사용 가능 | 람다식은 재사용 불가 |
4. 익명 클래스와 람다식 활용 예제
@FunctionalInterface
interface Calculator {
int operate(int a, int b);
}
public class AnonymousAndLambdaExample {
public static void main(String[] args) {
Calculator addition1 = new Calculator() {
@Override
public int operate(int a, int b) {
return a + b;
}
};
System.out.println("익명 클래스: 5 + 3 = " + addition1.operate(5, 3));
Calculator addition2 = (a, b) -> a + b;
System.out.println("람다식: 5 + 3 = " + addition2.operate(5, 3));
}
}
5. 익명 클래스와 람다식의 장단점
익명 클래스의 장점
- 모든 클래스와 인터페이스에 적용 가능.
- 하나의 객체를 빠르게 생성 가능.
익명 클래스의 단점
- 코드가 길어지고 가독성이 떨어짐.
- 동일 기능을 여러 번 구현해야 할 때 비효율적.
람다식의 장점
- 코드가 간결하고 가독성이 높음.
- 함수형 인터페이스를 간편하게 구현 가능.
람다식의 단점
- 함수형 인터페이스에만 적용 가능.
- 복잡한 로직을 구현할 때 코드가 읽기 어려울 수 있음.
6. 정리
익명 클래스
- 클래스 이름 없이 선언과 동시에 객체를 생성하여 인터페이스나 추상 클래스를 구현할 때 사용.
람다식
- 익명 클래스보다 간결한 방식으로 함수형 인터페이스를 구현할 때 사용.