람다 표현식
- 람다식은 메서드를 하나의 식으로 표현한 것으로, 람다식으로 메서드의 역할을 대신할 수 있다.
- 또한 람다식은 메서드의 매개변수로 전달되거나 메서드의 결과로 반환될 수도 있으므로, 메서드를 변수처럼 다루는 것이 가능하다.
(x, y) -> x < y ? x : y;
작성 규칙
(매개변수 목록) -> {함수 몸체}
- 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있다.
- 매개변수가 하나인 경우에는 ()를 생략할 수 있다.
- 함수의 몸체가 하나의 명령문으로 이루어진 경우에는 {}를 생략할 수 있다. (세미콜론 X)
- 함수의 몸체가 하나의 return 문으로 이루어진 경우에는 {}를 생략할 수 없다.
- return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결과값이 된다. (세미콜론 X)
- 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다.
함수형 인터페이스
- 함다식을 하나의 변수에 대입할 때 사용하는 참조변수 타입을 말하며, 람다식과 인터페이스의 메서드가 1:1로 연결된다.
- 따라서 함수형 인터페이스에는 오직 하나의 추상 메서드만 가지며, java.util.function 패키지에 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 정의해 놓았다.
선언과 사용
- @FunctionalInterface 어노테이션을 인터페이스 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식한다.
- 컴파일러는 명시된 함수형 인터페이스에 두 개 이상의 추상 메서드가 선언되면 오류를 발생시킨다.
@FunctionalInterface
interface Calc { // 함수형 인터페이스의 선언
public int min(int x, int y);
}
public class Lambda02 {
public static void main(String[] args){
Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현
System.out.println(minNum.min(3, 4)); // 함수형 인터페이스의 사용
}
}
메서드 참조
- 람다식이 단 하나의 메서드만 호출하는 경우 메서드 참조라는 방법으로 람다식을 간단하게 처리할 수 있다.
- 메서드 참조를 사용하면 불필요한 매개변수를 제거하고 다음과 같이 :: 기호를 사용하여 표현할 수 있다.
클래스이름::메서드이름
또는
참조변수::메서드이름
DoubleUnaryOperator oper;
oper = (n) -> Math.abs(n); // 람다 표현식
oper = Math::abs; // 메소드 참조
생성자 참조
- 생성자를 호출하는 람다식도 메서드 참조로 변환할 수 있으며, 배열을 생성할 때에도 생성자 참조를 사용할 수 있다.
Supplier<MyClass> s = MyClass::new;
// 배열 생성
Function<Integer, int[]> f = int[]::new;
'Java > Java' 카테고리의 다른 글
Optional 클래스 (0) | 2022.03.28 |
---|---|
스트림 (Stream) (0) | 2022.03.28 |
Enum 클래스 (0) | 2022.03.28 |
Arrays, Collections (0) | 2022.03.28 |
Comparable과 Comparator (0) | 2022.03.28 |