JAVA · 람다/메서드
메서드 참조 패턴 활용
실전에서 메서드 참조를 효과적으로 활용하는 패턴을 배웁니다.
람다/메서드중급메서드참조Comparatorcomparing패턴
핵심 설명
실전에서 메서드 참조를 효과적으로 활용하는 패턴을 배웁니다.
Java code
import java.util.*;
import java.util.stream.*;
public class MethodRefPatterns {
record Person(String name, int age) {}
// 정적 팩토리 메서드
static Person create(String name) {
return new Person(name, 0);
}
// 인스턴스 메서드
boolean isAdult(Person p) {
return p.age() >= 18;
}
public static void main(String[] args) {
List<String> names = List.of("Alice", "Bob", "Charlie");
// 생성자 참조로 객체 생성
List<Person> people = names.stream()
.map(MethodRefPatterns::create)
.toList();
// Getter를 키 추출기로
Map<String, Person> byName = people.stream()
.collect(Collectors.toMap(Person::name, p -> p));
// 메서드 참조로 비교기 생성
List<Person> sorted = List.of(
new Person("Bob", 25),
new Person("Alice", 30)
).stream()
.sorted(Comparator.comparing(Person::name))
.toList();
// 체이닝: 이름순 -> 나이 역순
Comparator<Person> comp = Comparator
.comparing(Person::name)
.thenComparing(Comparator.comparingInt(Person::age).reversed());
System.out.println(sorted);
}
}학습 팁
Comparator.comparing()과 메서드 참조를 조합하면 복잡한 정렬 로직을 선언적으로 표현할 수 있습니다.
주의할 점
Comparator.comparing(Person::age)는 박싱이 발생합니다. Comparator.comparingInt(Person::age)를 사용하세요.
자주 묻는 질문
메서드 참조 패턴 활용란 무엇인가요?
실전에서 메서드 참조를 효과적으로 활용하는 패턴을 배웁니다.
메서드 참조 패턴 활용 학습 시 주의할 점은 무엇인가요?
Comparator.comparing(Person::age) 는 박싱이 발생합니다. Comparator.comparingInt(Person::age) 를 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.