Java Study

람다식(Lambda expression) -> 메서드 참조(Method reference)

초코너무조코 2025. 1. 22. 19:44
728x90

목차


    람다식(Lambda expression) -> 메서드 참조(Method reference)로 변환하는 방법

    Java 8부터 도입된 람다식메서드 참조는 함수형 프로그래밍을 지원하는 중요한 기능입니다. 람다식을 사용하면 코드가 간결해지고, 메서드 참조를 통해 이를 더 간단하고 읽기 쉽게 만들 수 있습니다.

    1. 람다식과 메서드 참조란?

    • 람다식: 익명 함수 형태로, 코드 내에서 한 번만 사용될 수 있는 짧은 함수 정의를 제공합니다.
      List<String> list = Arrays.asList("apple", "banana", "cherry");
      list.forEach(str -> System.out.println(str));
      
    • 메서드 참조: 이미 정의된 메서드를 람다식처럼 사용할 수 있도록 하는 방식입니다. :: 기호를 사용하여 메서드를 참조합니다.
      List<String> list = Arrays.asList("apple", "banana", "cherry");
      list.forEach(System.out::println);
      

    2. 람다식을 메서드 참조로 변환하기

    람다식을 메서드 참조로 변환할 수 있는 경우는 크게 4가지 유형으로 나눌 수 있습니다.


    2.1. 인스턴스 메서드 참조

    람다식에서 객체의 메서드를 호출하는 경우, 해당 메서드를 메서드 참조로 변환할 수 있습니다.

    예시 1: 인스턴스 메서드 참조

    람다식

    List<String> list = Arrays.asList("apple", "banana", "cherry");
    list.forEach(str -> System.out.println(str)); 
    

    메서드 참조

    list.forEach(System.out::println);
    

    System.out.println 메서드를 참조하는 형태로, 람다식이 메서드 참조로 변환되었습니다.

     

    인스턴스 메서드 참조 간단 요약

    // 람다식
    (obj , x) -> obj.method(x)      
    // 메서드 참조
    ClassName::method

    2.2. 정적(static) 메서드 참조

    정적 메서드에 대해서도 람다식을 메서드 참조로 바꿀 수 있습니다. 정적 메서드의 경우, 클래스 이름을 사용하여 메서드를 참조합니다.

    예시 2: 정적 메서드 참조

    람다식

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    numbers.forEach(num -> System.out.println(Math.pow(num, 2)));
    

    메서드 참조

    numbers.forEach(num -> System.out.println(Math::pow, num, 2));
    

    Math.pow 메서드를 참조하는 형태로 람다식을 메서드 참조로 변환할 수 있습니다.

     

    정적 메서드 참조 간단 요약

    //람다식
    (x) -> ClassName.method(x)
    //메서드 참조
    ClassName::method

     


    2.3. 생성자 참조

    람다식이 객체를 생성하는 경우, 이를 생성자 참조로 바꿀 수 있습니다. 객체 생성 시 호출할 생성자를 참조합니다.

    예시 3: 생성자 참조

    람다식

    List<String> names = Arrays.asList("John", "Jane", "Tom");
    names.forEach(name -> new Person(name));
    

    메서드 참조

    names.forEach(Person::new);
    

    Person 클래스의 생성자를 참조하는 방식으로 람다식을 메서드 참조로 변환할 수 있습니다.


    2.4. 인스턴스 메서드 참조 (특정 객체에 대해)

    특정 객체에 대해 인스턴스 메서드를 참조하는 경우도 메서드 참조로 변환 가능합니다.

    예시 4: 특정 객체의 인스턴스 메서드 참조

    람다식

    List<String> list = Arrays.asList("apple", "banana", "cherry");
    list.sort((str1, str2) -> str1.compareTo(str2));
    

    메서드 참조

    list.sort(String::compareTo);
    

    String 객체의 compareTo 메서드를 참조하는 형태로 람다식을 메서드 참조로 변환할 수 있습니다.

     

    특정 객체에 대한 인스턴스 메서드 참조 간단 요약

    // 람다식
    (x) -> obj.method(x)      
    // 메서드 참조
    obj::method

     


    3. 결론

    람다식을 메서드 참조로 변환하면 코드가 더 간결하고 가독성이 높아집니다. 이를 통해 Java의 함수형 프로그래밍을 더 쉽게 활용할 수 있습니다. 메서드 참조는 람다식을 사용하여 함수형 인터페이스의 메서드를 구현할 때, 이미 정의된 메서드를 호출하는 방식으로 코드를 간단하게 바꿀 수 있게 해줍니다.


    이와 같은 방식으로 람다식을 메서드 참조로 변환할 수 있으며, 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다.

     

    728x90