[아이템 43] 람다보다는 메서드 참조를 사용하라.
메서드 참조를 이용하면 람다보다 간단하게 코드를 작성할 수 있습니다.
문법
클래스이름::메소드이름
또는
참조변수이름::메소드이름
다음의 예제 코드는 키가 맵에 없다면 키와 숫자 1을 매핑하고, 이미 있다면 기존 매핑 값에 1을 증가시킵니다.
|
|
위 코드는 Integer
의 sum
메서드를 이용해서 대체할 수 있으며 메서드 참조를 이용해 간결하게 표현할 수 있습니다.
|
|
메서드 참조를 이용하면 코드가 간결해지며 가독성이 좋아지는 경우가 있지만 때로는 람다에서는 매개변수의 이름으로 가이드를 할 수도 있고 메서드 참조보다 더 읽기 쉽고 가독성이 더 좋아지는 경우가 있습니다.
메서드 참조 유형은 다섯가지가 있습니다. 가장 흔한 유형은 앞에서 사용했던 정적 메서드를 가리키는 메서드 참조입니다. 먼저 인스턴스 메서드를 참조하는 유형이 두 가지가 있습니다. 그 중 하나는 수신 객체(receiving object; 참조 대상 인스턴스)를 특정하는 한정적(bound) 인스턴스 참조이고, 다른 하나는 수신 객체를 특정하지 않는 비한정적(unbound) 인스턴스 메서드 참조압니다. 한정적 참조는 함수 객체가 받는 인수와 참조되는 메서드가 받는 인수와 똑같습니다. 비한정적 참조에서는 함수 객체를 적용하는 시점에 수신 객체를 알려줍니다. 이를 위해 수신 객체 전달용 매개변수가 매개변수의 목록의 첫 번째로 추가되며, 그 뒤로는 참조되는 메서드 선언에 정의된 매개변수들이 뒤따릅니다. 비한정적 참조는 스트림 파이프라인에서의 매핑과 필터 함수에 주로 사용됩니다.