CS/언어

[Java] 이중 콜론 연산자 (::)

pythaac 2022. 3. 31. 07:29

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개이며, 타입이 같음

 

너무 마음에 드는 표현식입니다. 람다를 사용할 때 단순한 함수를 사용할 때가 많은데, 앞으로 사용할 수 있는 기회가 많으면 좋겠습니다. 함수형 프로그래밍에 대해 빨리 공부하고싶네요!