18.1 람다식이란?
1. 익명 구현 객체의 다이어트 🏃
자바 8부터 도입된 람다식(Lambda Expressions)은 코드를 아주 간결하게 만들어주는 문법입니다. 특히 인터페이스의 익명 구현 객체를 만들 때 효과적입니다.
마치 “리모컨 조립 세트”와 같습니다.
- 익명 구현 객체: 플라스틱 케이스, 배터리 커버, 버튼 고무 등을 다 조립해야 함. (코드가 길다)
- 람다식: “핵심 칩(로직)”만 꽂으면 바로 동작함. (코드가 짧다)
2. 코드 비교
예를 들어 Calculable 인터페이스가 있다고 가정해 봅시다.
public interface Calculable {
void calculate(int x, int y);
}
이 인터페이스를 구현해서 사용하는 방법을 비교해 보겠습니다.
1) 기존 방식 (익명 구현 객체)
// 코드가 길고 복잡해 보입니다.
new Calculable() {
@Override
public void calculate(int x, int y) {
System.out.println(x + y);
}
};
2) 람다식 방식
// 핵심 로직만 남았습니다.
(x, y) -> { System.out.println(x + y); }
람다식은 (매개변수) -> { 실행코드 } 형태로 작성합니다.
자바 컴파일러는 이 코드를 보고 “아, Calculable 인터페이스를 구현한 익명 객체구나!”라고 똑같이 해석해서 .class 파일을 만듭니다.
3. 함수형 인터페이스 (@FunctionalInterface)
람다식은 추상 메소드가 딱 하나인 인터페이스에만 사용할 수 있습니다. 이런 인터페이스를 함수형 인터페이스(Functional Interface)라고 부릅니다.
두 개 이상의 추상 메소드가 있으면 람다식이 어떤 메소드를 구현하는지 알 수 없기 때문입니다.
@FunctionalInterface 어노테이션을 붙이면, 컴파일러가 “추상 메소드가 하나인지” 검사해 줍니다.
@FunctionalInterface
public interface Calculable {
void calculate(int x, int y);
// void anotherMethod(); // 이게 있으면 에러 발생!
}
4. 예제 코드
package ch18.sec01;
public class LambdaExample {
public static void main(String[] args) {
// 1. 덧셈 처리 람다식
action((x, y) -> {
int result = x + y;
System.out.println("result: " + result);
});
// 2. 뺄셈 처리 람다식
action((x, y) -> {
int result = x - y;
System.out.println("result: " + result);
});
}
public static void action(Calculable calculable) {
// 데이터
int x = 10;
int y = 4;
// 데이터 처리 (람다식으로 전달된 로직 실행)
calculable.calculate(x, y);
}
}
실행 결과
result: 14
result: 6
서브목차