[JAVA] 자바 정리노트(7)
-람다식, 스트림-
1. 람다식은 메소드를 하나의 식으로 표현한 것으로, 메소드를 변수처럼 다루는 것이 가능해졌다.
2. 람다식에 선언된 매개변수 타입은 생략이 가능하다. 또한 매개변수가 하나인 경우 괄호를 생략할 수 있다. 반환타입도 생략이 가능하다. 다만 반환타입 return을 생략하지 않을 경우 람다식의 {}를 생략할 수 없다.
(int a, int b) -> a>b ? a b
(a, b) -> a>b ? a:b // 매개변수의 타입이 생략된 경우
a - > a + a // 매개변수가 하나인 경우
(a , b) -> {return a>:b ? a:b} // 반환타입이 있을 경우 {}괄호 생략 불가
3. 람다식을 다루기 위해 만들어진 함수형 인터페이스에는 오직 하나의 추상 메소드만 정의되어야 한다. 다만 static, default 메소드에는 제약이 없다. 더불어 함수형 인터페이스에는 @FunctionalInterface를 붙여 정의가 바로 되었는지 확인할 수 있다.
4. 메소드 매개변수가 함수형 인터페이스일 경우 메소드 호출시 람다식을 참조하는 참조변수를 매개변수로 지정해야 한다. 또한 메소드 반환타입이 함수형 인터페이스라면 추상 메소드와 동등한 람다식을 가리키는 참조변수를 반환하거나 직접 람다식 반환이 가능하다.
5. 함수형 인터페이스로 람다식을 참조하는 것일뿐 람다식의 타입이 함수형 인터페이스의 타입과 일치하지 않는다. 이유인즉 람다식은 타입이 없는 익명 객체이기 떄문이다. 그래서 타입을 일치시키기 위해 형변환이 필요하다. 이때 형변환은 함수형 인터페이스만 가능하다. (예외의 경우, 함수형 인터페이스로 먼저 형변환 후 다시 Object형으로 변환)
6. 람다식 내에서 참조하는 지역변수는 상수로 간주한다.
7. Function<Integer, Integer> f = ... // 매개변수 타입과 반환타입이 Integer
8. 람다식이 하나의 메소드만 호출하는 경우, method reference의 방법으로 람다식을 더 간략하게 표현할 수 있다.
BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2); // 2개의 타입을 받아 1개의 결과를 반환하는 함수형 인터페이스
BiFunction<String, String, Boolean> f = String::equals; // method reference
9. 생성자를 호출하는 람다식 또한 method reference 방법이 가능하다.
Supplier<AClass> s = () -> new AClass(); // 반환값만 존재하는 함수형 인터페이스 Supplier
Supplier<AClass> s = AClass::new; // method reference
10. 스트림은 1회용이다. 재사용을 원할 경우 새로운 스트림을 다시 생성해야 한다.
11. 스트림은 중간연산과 최종 연산으로 구성된다. 최종연산은 단 한번만 가능하다.
12. 최종 연산이 수행되기 전까지 중간 연산은 수행되지 않는다.
'▶개발 > JAVA' 카테고리의 다른 글
[JAVA] 자바 정리노트(6) (0) | 2019.01.27 |
---|---|
[JAVA] 자바 정리노트(5) (0) | 2019.01.26 |
[JAVA] 자바 정리노트(4) (0) | 2019.01.26 |
[JAVA]날짜와 시간 클래스, Date의 Calendar간의 변환 (0) | 2019.01.25 |
[JAVA] 자바 정리노트(3) (0) | 2018.12.19 |