jgwk

lambda (1) 본문

java

lambda (1)

JungleWalker 2021. 5. 24. 11:52

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"));
    }
}

 

참조

oracle

tcpschool

 

'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