less than 1 minute read

메서드 참조와 람다

자바의 메서드 참조 (method reference)를 사용하면, 함수 객체를 람다보다도 더 간결하게 만들 수 있다.

다음은 정렬을 위한 비교 함수를 각기 람다와 메서드 참조 방식으로 구현한 예시이다.

Collections.sort(words,
		(s1, s2) -> Integer.compare(s1.length(), s2.length()));

Collections.sort(words, comparingInt(String::length));

위와 같이, 대부분의 경우 람다식보다 메서드 참조를 사용할 때 더 짧고 명확하게 구현할 수 있다.

람다를 사용하면 좋은 경우

간혹 람다를 사용하는 것이 더 간결한 경우가 있는데, 주로 메서드와 람다가 같은 클래스에 위치하는 경우 그렇다.

service.execute(GoshThisClassNameIsHumongous::action); // 메서드 참조

service.execute(() -> action()); // 람다

위 코드는 람다를 사용하면 더 좋은 경우의 예시이다.

메서드 참조 유형

메서드 참조 유형 예시 람다식
정적 Integer::parseInt str -> Integer.parseInt(str)
한정적 Instant.now()::isAfter Instant then = Instant.now();
t -> then.isAfter(t)
비한정적 String::toLowerCase str -> str.toLowerCase()
클래스 생성자 TreeMap<K,V>::new () -> new TreeMap<K,V>()
배열 생성자 int[]::new len -> new int[len]

Leave a comment