메서드 참조란?
- 이미 정의된 메서드를 람다 표현식 대신 간결하게 표현하는 문법
- 예: (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;
메서드 참조 정리
"람다 내부가 단순히 메서드 호출이라면 메서드 참조를 사용"
익숙해지면 가독성과 유지보수가 훨씬 쉬워진다.
'Java' 카테고리의 다른 글
[Java] 김영한의 실전 자바 - 고급 3편 섹션11 Optional (1) | 2025.04.17 |
---|---|
[Java] 김영한의 실전 자바 - 고급 3편 섹션7 스트림API (1) | 2025.04.12 |
[Java] 김영한의 실전 자바 - 고급 3편 섹션4,5 람다활용,익명클래스와의 차이 (+정적 팩토리 메서드) (0) | 2025.04.07 |
[Java] 익명 클래스 vs 람다: 자바 람다, 내부에선 어떤 일이 벌어질까?(Java Lambda & invokedynamic) (0) | 2025.04.03 |
[Java] 김영한의 실전 자바 - 고급 3편 섹션3 함수형 인터페이스 (0) | 2025.04.03 |