람다 표현식, 메소드 참조 문법

박수민·2024년 3월 27일
0

람다식 메소드::참조

자바의 람다표현식을 통해 코드 정의를 혁신적으로 줄여주었지만 이보다 더 간략하게 줄이는 문법이 있다.
메소드 참조(Method Reference)는 말 그대로 실행하려는 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 굳이 선언이 불필요한 부분을 생략하는 것을 말한다.

ex) Math 클래스의 max() 정적 메소드를 호출하는 람다식

(x, y) -> Math.max(x, y)

BUT. 함수 형태를 보면 리턴값 자체가 또다른 Math 클래스의 메소드를 호출하는 것 뿐이고, 람다 함수의 매개변수 역시 그대로 max() 메서드의 매개변수로 들어가기 때문에 코드 중복이 발생하기 때문이다.

따라서 중복되는 매개변수를 없애고, 화살표를 없애고, 클래스가 메소드를 참조하는 기호인 . 기호를 :: 기호로 변환하면 다음과 같이 표현 할 수 있게 된다.

Math::max; // (x, y) -> Math.max(x, y)

메서드 참조 종류

어떠한 메서드를 참조하여 실행하느냐에 메소드 참조도 종류가 나뉘게 된다.

종류람다 표현식메서드 참조
정적 메서드 참조(x) -> ClassName.method(x)ClassName::method
인스턴스 메서드 참조(x) -> obj.method(x)obj::method
매개변수의 메서드 참조(obj, x) -> obj.method(x)ClassName::method
생성자 참조(x, y) -> new ClassName(x, y)ClassName::new

프로젝트에서 사용한 사용자 주소 전체 조회 부분이다.

public List<AddressResponseDto> getUserAllAddress(User user) {
        return addressRepository.findAllByUser(user)
                .stream()
                .map(address -> new AddressResponseDto(address)).toList();
    }

의 람다표현식을 메소드 참조 형식으로 작성할 수 있다.

  public List<AddressResponseDto> getUserAllAddress(User user) {
        return addressRepository.findAllByUser(user)
                .stream()
                .map(AddressResponseDto::new).toList();
    }

출처: https://inpa.tistory.com/entry/JAVA8-☕-람다식을-더-짧게-메소드-참조Method-Reference [Inpa Dev 👨‍💻:티스토리]

0개의 댓글