Java
[Java] 김영한의 실전 자바 - 고급 3편 섹션6 메서드 참조
고쩡이
2025. 4. 12. 22:43
메서드 참조란?
- 이미 정의된 메서드를 람다 표현식 대신 간결하게 표현하는 문법
- 예: (x, y) -> add(x, y) → 클래스명::메서드명
메서드 참조의 4가지 유형
1. 정적 메서드 참조 | 클래스의 static 메서드 참조 | Math::max, Integer::parseInt |
2. 특정 객체의 인스턴스 메서드 참조 | 인스턴스를 명확히 지정 | person::introduce |
3. 생성자 참조 | 생성자 호출 참조 | Person::new |
4. 임의 객체의 인스턴스 메서드 참조 | 매개변수로 들어오는 객체의 메서드 참조 | Person::introduce, String::toUpperCase |
1. 메서드 참조를 쓰는 이유
- 코드 간결화: 람다식보다 짧고 명확
- 중복 제거: 공통 로직을 하나의 메서드로 참조 가능
- 가독성 향상: add(x, y)처럼 내부 구현만 있는 람다 대신 ::로 명확히 표현
2. 임의 객체의 인스턴스 메서드 참조
- 가장 많이 사용되는 형태
- Person::introduce → (Person p) -> p.introduce()와 동일
- 첫 번째 매개변수가 호출 대상이 됨
◎예시 코드
// 정적 메서드 참조
Function<String, String> f1 = Person::greetingWithName;
// 특정 객체 참조
Person p = new Person("Kim");
Supplier<String> f2 = p::introduce;
// 생성자 참조
Supplier<Person> f3 = Person::new;
// 임의 객체의 인스턴스 메서드 참조
Function<Person, String> f4 = Person::introduce;
Function<String, String> f5 = String::toUpperCase;
BiFunction<Person, Integer, String> f6 = Person::introduceWithNumber;
메서드 참조 정리
"람다 내부가 단순히 메서드 호출이라면 메서드 참조를 사용"
익숙해지면 가독성과 유지보수가 훨씬 쉬워진다.