람다표현식 (Lambda) 개념
- 함수형 인터페이스를 구현한 클래스 즉, 익명 클래스의 메소드를 하나의 식으로 표현
- 함수형 인터페이스의 메서드를 람다표현식으로 작성해서 다른 메서드의 파라미터로 전달할 수 있음
- 매개변수, 화살표, 몸통 구조
- 함수형 인터페이스를 통해서만 사용이 가능함, 즉 람다 표현식 전체를 해당 함수형 인터페이스를 구현한 클래스의 인스턴스로 취급함
함수형 인터페이스
- 인터페이스 내에 한개의 추상 메소드만 정의
- 외부 메소드에서 호출 시 람다식이나 메소드 참조 가능
- 자바에서 함수를 일급객체로 사용할 수 없는 단점 보완
Lambda 특징
장점 |
단점 |
코드가 축약이 됨 (익명함수로 된 코드 줄임) |
남용시 이해하기 어려움 |
가독성 증가 |
까다로운 디버깅 |
병렬 프로그래밍 |
|
Lambda 컴파일 처리
- invokedynamic을 사용하여 Lambda 표현식 구현을 위한 코드 생성을 런타임 시까지 연기함
- 런타임시에 어떤 방법으로 객체를 생성할지 결정하는데, 성능 향상을 위한 최적화된 방법을 사용
Lambda 예시
@FunctionalInterface
public interface Converter {
int merge(int a, int b);
}
public class LambdaTest {
public static void main(String[] args) {
// 람다 파라미터 / 화살표 / 람다 몸체
Converter converter = (a, b) -> a + b;
int result = converter.merge(1, 2);
System.out.println(result);
}
}
- 함수형 인터페이스 선언
- 선언한 함수형 인터페이스 사용
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("명령형");
}
}).start();
new Thread(()->{
System.out.println("람다표현식");
}).start();
- 람다 표현식으로 코드를 더 간결하게 표현이 가능함