PHpullh
학습 라이브러리/Java/메서드 참조 패턴 활용

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) 를 사용하세요.