JAVA
[Java] 람다(Lamda)
kimyongjun0129
2025. 4. 17. 11:33
람다(Lamda)
익명 클래스를 간단하게 표현하는 방식이다. 즉, 익명 클래스의 메서드를 코드 블록으로 만들어서 변수에 넘기거나 인자로 전달 할 수 있게 해주는 기능이다.
람다 문법
Calculator c = (a, b) -> a + b; // 람다식
Calculator c1 = new Calculator() { // 익명 클래스
@Override
public int sum(int a, int b) {
return a + b;
}
};
익명 클래스를 사용할 때보다 훨씬 간결하게 표현할 수 있다.
컴파일러가 람다 표현식을 통해 익명 클래스를 내부적으로 만들어 준다.
조건 : 함수형 인터페이스 (자바에서 권장)
@FunctionalInterface
public interface Calculator {
public int sum(int a, int b);
}
람다는 추상 메서드가 딱 하나만 있는 인터페이스(함수형 인터페이스)에서만 사용할 수 있다.
@FunctionalInterface 어노테이션을 쓰면, 하나의 추상 메서드만 넣도록 강제해준다.
public interface Calculator {
public int sum(int a, int b);
}
하나의 추상 메서드를 가진 일반 인터페이스를 통해서도 사용 가능하다. (어노테이션의 유무)
사용 예제
더보기
Main
public class Main {
public static void main(String[] args) {
int result = calculate(5, 5, (a, b) -> a + b);
System.out.println("result = " + result);
}
public static int calculate(int a, int b, Calculator calculator) {
return calculator.sum(a, b);
}
}
Calculator
@FunctionalInterface
public interface Calculator {
public int sum(int a, int b);
}
람다식을 직접 매개 변수로 전달하여 사용할 수 있다. 코드가 간결해지고 가독성이 올라간다.
과정을 정리하자면,
- calculate 메서드의 Calculator calculator = (a, b) -> a + b : 컴파일러가 Calculator 인터페이스의 람다식이라고 추론한다.
- (a, b) -> a + b : 람다식을 통해 익명 클래스 인스턴스를 내부적으로 만든다.
- calculator.sum(a, b) : 계산을 한 후 리턴한다.