먼저, 메서드 참조의 형태는 다음과 같다.

// 메서드 참조는 아래와 같이 두 가지 형태로 사용이 가능하다.
클래스명::메서드명
참조변수명::메서드명

 

메서드 참조는 특정 조건에 한하여 람다 표현식을 생략할 수 있게한다.

여기서 특정 조건이란 아래와 같다.

// 아래와 같은 람다 표현식이 있고, 해당 람다는 선택된 요소를 특정 메서드의 파라미터로 전달하는 역할을 한다.
(e -> demoMethod(e))

// 위와 같이 람다에서 선택된 요소가 특정 메서드를 호출하기 위한 파라미터로서의 역할을 할 뿐이라면, 아래와 같이 사용이 가능하다.
(클래스명::demoMethod)
(참조변수명::demoMethod)

 

조금 더 현실감 있는 예제를 살펴보자.

dao 객체로부터 ItemList를 가져오는데, 가져온 각각의 item들은 특정 가공을 거쳐야한다고 생각해보자.

List<Item> itemList = itemDao.getItemList(serverName)
        .stream()
        .map(item -> manufactureItem(item))
        .collect(Collectors.toList());
        
 private Item manufactureItem(Item item) {
     // 아이템 가공하기
 }

 

위의 코드는 메서드 참조를 이용해 한 번 더 간단하게 표현이 가능하다.

List<Item> itemList = itemDao.getItemList(serverName)
        .stream()
        .map(this::manufactureItem)
        .collect(Collectors.toList());
        
 private Item manufactureItem(Item item) {
     // 아이템 가공하기
 }

 

'Programming > Java' 카테고리의 다른 글

[Java] Optional<T> 클래스  (0) 2020.03.24
[Java ] 함수형 인터페이스 ( Functional Interface )  (0) 2020.03.24
[Java] .jar와 .war  (0) 2020.03.20
[Java] 람다와 스트림 ( Lambda, Stream )  (0) 2020.03.05
[Java] enum 클래스  (0) 2020.03.04