1. 상황
아래와 같이 Optional에서 orElseThrow()를 통해 값이 없으면 발생시킬 exception을 지정하려 했습니다.
Optional<ApiInfo> apiInfo = apiInfoRepository
.findAll()
.stream()
.findFirst()
.orElseThrow(() -> new ApiInfoNotExistException());
그런데 orElseThrow()의 arg로 들어가는 lambda식을 아래와 같이 변경할 수 있었습니다.
Optional<ApiInfo> apiInfo = apiInfoRepository
.findAll()
.stream()
.findFirst()
.orElseThrow(ApiInfoNotExistException::new);
2. 이중 콜론 연산자
이중 콜론(::)은 메소드 참조 표현식이라고 하며, 파라미터를 생략할 수 있는 기능을 합니다. 파라미터 생략은 lambda식의 input을 output함수의 input으로 곧바로 넣어주는 것을 말합니다.
- x -> System.out.println(x)
- System.out::println
따라서, 이를 사용하기 위해서는 다음과 같은 조건이 필요합니다.
- lambda식의 output이 특정 객체의 메서드
- lambda식의 input과 사용하는 메서드의 input이 1개이며, 타입이 같음
너무 마음에 드는 표현식입니다. 람다를 사용할 때 단순한 함수를 사용할 때가 많은데, 앞으로 사용할 수 있는 기회가 많으면 좋겠습니다. 함수형 프로그래밍에 대해 빨리 공부하고싶네요!
'CS > 언어' 카테고리의 다른 글
[JAVA] 객체지향 설계 - 객체지향 4대 특성 (0) | 2022.06.26 |
---|---|
[JAVA] Delegation & Composition & Aggregation (0) | 2022.06.24 |
[JAVA] Hash와 Thread-Safe (0) | 2022.01.19 |
[JAVA] ArrayList에서 특정 값을 가진 원소들 찾기 (0) | 2022.01.14 |
[JAVA] Long에 대하여 (0) | 2022.01.12 |