람다 표현식
- 람다 표현식은 메소드를 하나의 식으로 표현한 것을 의미함
(x, y) -> x < y ? x : y;
- 람다 표현식을 사용하면 클래스, 객체 생성 없이 메소드를 사용할 수 있음
- 자바에서 람다 표현식은 익명 클래스와도 같다고 할 수 있음
- 람다식은 메서드의 매개변수로 전달될 수도 있으며, 메소드의 결과값으로 반환될 수도 있음
- 람다 표현식 사용을 통해 기존의 불필요한 코드를 줄이고, 작성된 코드의 가독성을 높일 수 있음
new Thread(new Runnable() {
public void run() {
System.out.println("make thread");
}
}).start();
new Thread(()->{
System.out.println("make thread");
}).start();
함수형 인터페이스
- 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야 함
- 이 때 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라 부름
- 함수형 인터페이스는 추상 클래스와 달리 단 하나의 추상 메서드만을 가져야 함
- 또한 @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));
}
}
메서드 참조
- 메서드 참조는 람다 표현식이 단 하나의 메서드만을 호출하는 경우에 람다식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해줌
MyClass obj = new MyClass;
Function<String, Boolean> func = (a) -> obj.equals(a);
Function<String, Boolean> func = obj::equals(a);
생성자 참조
- 생성자를 호출하는 람다식도 메소드 참조를 이용해 생정자 참조로 변환할 수 있음
Function<Integer, double[]> func1 = a -> new double[a];
Function<Integer, double[]> func2 = double[]::new;
출처:
http://www.tcpschool.com/java/java_lambda_concept