Java

[Java] 김영한의 실전 자바 - 고급 3편 섹션6 메서드 참조

고쩡이 2025. 4. 12. 22:43

본문은 인프런 김영한T 자바 고급편3을 공부하고 직접 정리한 내용입니다:)

메서드 참조란?

  • 이미 정의된 메서드를 람다 표현식 대신 간결하게 표현하는 문법
  • 예: (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;

 

 

메서드 참조 정리

"람다 내부가 단순히 메서드 호출이라면 메서드 참조를 사용"

익숙해지면 가독성과 유지보수가 훨씬 쉬워진다.