jgwk
lambda (1) 본문
jdk8 이 나온지 한세월이 지났는데 지금까지 jdk7 을 써서 이제야 정리해본다.
람다는 함수(메서드)를 표현하는 방법이다. 자바는 메서드를 인자 또는 반환 타입으로 취급할 수 없는데, jdk8 에서 람다라는 형태로 그것을 지원하기 시작했다. 정확한 구현은 모르지만, 코드 제공자의 입장에선 여전히 인터페이스를 통해 메서드를 호출한다.
자바에서 람다 문법의 생략 가능한 경우만 적어 보자면
- 인자가 없을 경우 인자를 감싸는 괄호 생략
- 표현식이 1개만 있을 경우 함수를 감싸는 중괄호 생략
- 표현식이 1개만 있고 반환 일 경우, 'return' 키워드 생략
이 가능하다.
특히 표현식이 1개만 있을 경우 메서드 참조(Method References)를 사용 하여 람다를 대체할 수 있다.
java.util.function 패키지에 미리 정의된 함수형 인터페이스는 미리 알아두어야 한다. 여기저기서 쓰이니까. 필요하면 만들면 되지만, 가능한 있는것을 조합해 단순하게 쓰는게 좋아보인다.
기본적으로 제공되는 함수형 인터페이스의 사용
public class Basic {
public static void main(String[] args) {
function();
consumer();
supplier();
predicate();
}
private static void function() {
Function<String, String> f1 = s -> s;
System.out.println(f1.apply("function"));
Function<String, String> f21 = s -> "f1(" + s + ")";
Function<String, String> f22 = s -> "f2(" + s + ")";
Function<String, String> f2 = f21.andThen(f22);
System.out.println(f2.apply("function"));
}
private static void consumer() {
Consumer<String> c = s -> System.out.println(s);
c.accept("consumer");
}
private static void supplier() {
Supplier<String> s = () -> "supplier";
System.out.println(s.get());
}
private static void predicate() {
Predicate<String> p = s -> "predicate".equals(s);
System.out.println(p.test("predicate"));
}
}
참조
'java' 카테고리의 다른 글
spring profile or maven profile (0) | 2021.11.28 |
---|---|
stream (1) (0) | 2021.05.25 |
lambda (2) - method references (0) | 2021.05.24 |
openjdk 설치 (mac, brew, adopt) (0) | 2021.04.13 |
eclipse 처음 설정 (0) | 2021.01.24 |
Comments