더북(TheBook)

flatMap을 이용해 옵션 값 함수 합성하기

Optional<T>를 리턴하는 메서드 f가 있고, 대상 타입 TOptional<U>를 리턴하는 메서드 g를 포함하고 있다고 하자. 일반 메서드라면 s.f().g()를 호출하는 방법으로 이 메서드들을 합성할 수 있다. 하지만 이 경우에는 s.f()에서 T가 아닌 Optional<T> 타입을 리턴하므로, 이러한 합성composition이 동작하지 않는다. 대신 다음과 같이 호출한다.


Optional<U> result = s.f().flatMap(T::g);


 

이렇게 하면 s.f()가 존재하면 g가 적용되고, 그렇지 않으면 비어 있는 Optional<U>가 리턴된다.

분명, Optional 값을 리턴하는 다른 메서드나 람다가 있다면 이 과정을 반복할 수 있다. 그러면 단순히 호출을 flatMap에 연결하는 것만으로 모든 부분이 성공할 경우에만 전체가 성공하는 단계들의 파이프라인을 구축할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.