간결한 문법으로 함수형 프로그래밍을 구현할 수 있도록 지원하는 익명 함수 표현식
1. 람다식이란
익명 함수를 표현하는 간결한 방법으로, 함수형 인터페이스를 구현할 때 사용된다. Java 8에서 도입되어, 매개변수와 반환값을 갖는 짧은 함수를 함수형 인터페이스의 인스턴스로 간단히 구현할 수 있게 해준다. 람다는 코드의 가독성을 높이고, 함수형 프로그래밍 스타일을 지원한다.
2. 람다식 구조
- 람다식은 두 가지 형태가 있다.
- 단일 표현식 람다
(매개변수) -> 내용
의 형태를 가진다.- 매개변수가 없을 경우 괄호를 비워도 된다.
- 매개변수가 하나일 때 괄호를 샹략할 수 있다.
- 반환값이 필요하면 자동으로 반환된다.
- 블록 람다
(매개변수) -> { 내용 }
의 형태를 가진다.- 매개변수가 없을 경우 괄호를 비워도 된다.
- 매개변수가 하나일 때 괄호를 샹략할 수 있다.
- 단일 표현식 형태와 차이점은 중괄호를 사용하고 여러 줄의 코드도 작성할 수 있다.
- 반환값이 필요하면
return
을 명시해야 한다.
3. 함수형 인터페이스
- 함수형 인터페이스는 하나의 추상 메서드만을 가진다.
default
메서드나static
메서드는 추가할 수 있다.
@FunctionalInterface
어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있다.
@FunctionalInterface
public interface MyConsumer<T> {
void consume(T data);
}
- 입력만 받고 출력이 없는 연산을 수행하는 함수형 인터페이스
@FunctionalInterface
public interface MySupplier<T> {
T get();
}
- 입력 없이 값을 반환하는 함수형 인터페이스
@FunctionalInterface
public interface MyFunction<T, R> {
R apply(T t);
}
- 입력을 받아서 결과를 반환하는 함수형 인터페이스
@FunctionalInterface
public interface MyPredicate<T> {
boolean apply(T t);
}
- 입력을 받아 논리값을 반환하는 함수형 인터페이스
4. 람다식 사용
public class App {
public static void main(String[] args) {
MyConsumer<Integer> r1 = (data) -> {
System.out.println("소비할 데이터: " + data);
};
r1.consume(1);
MySupplier<String> r2 = () -> {
return "good";
};
MySupplier<String> r3 = () -> "good";
String msg = r3.get();
System.out.println(msg);
MyFunction<Integer, String> r4 = (data)->{
return "data:" + data;
};
MyPredicate<Integer> r5 = x -> x > 5;
boolean msg2 = r5.apply(10);
System.out.println(msg2);
}
}
MyConsumer<Integer> r1
- 블록 람다를 사용하여 출력을 정의했다.
- 정수 값을 받아 해당 내용을 출력한다.
MySupplier<String> r2
- 블록 람다를 사용하여 문자열을 반환했다.
- 입력값 없이
“good”
을 반환한다.
MySupplier<String> r3
- 단일 표현식 람다를 사용하여 자동반환을 통해 문자열을 반환했다.
- 입력값 없이
"good"
을 반환한다.
MyFunction<Integer, String> r4
- 블록 람다를 사용하여 정수형 값을 받아 문자열로 반환했다.
- 정수 값을 받아
“data: ”
뒤에 정수값을 추가하여 반환한다.
MyPredicate<Integer> r5
- 단일 표현식 람다를 사용하여 논리값을 반환했다.
- 입력값이 5보다 크면
true
를 반환한다.
Share article