728x90

 

더블 콜론 :: (메서드 참조 Method Reference)❓

메서드 참조(Method Reference)는 자바 8에서 도입된 기능으로, 기존 메서드를 참조하여 람다 표현식을 더욱 간단하게 작성할 수 있도록 합니다.

 

람다식에서 파라미터를 중복해서 사용하고 싶지 않을 때 사용하며, 람다식과 동일한 처리 방법을 갖습니다.

 

메서드 참조는 다음과 같은 네 가지 유형이 있습니다

 

 

  • 정적 메서드 참조 (Static Method Reference)
  • 인스턴스 메서드 참조 (Instance Method Reference)
  • 생성자 참조 (Constructor Reference)

 

메서드 참조 사용 방법

[인스턴스]::[메소드명(or new)]
  1. 람다 표현식 () ➡️ {}에서만 사용 가능
  2.  static 메서드인 경우 인스턴스 대신 클래스 이름으로 사용

정적 메서드 참조

메서드 참조 사용 ❌

import java.util.function.Function;

public class StaticMethodReferenceExample {
    public static void main(String[] args) {
        Function<String, Integer> parseIntLambda = s -> Integer.parseInt(s);
        System.out.println(parseIntLambda.apply("123"));  // 출력: 123
    }
}

 

메서드 참조 사용 ✅

import java.util.function.Function;

public class StaticMethodReferenceExample {
    public static void main(String[] args) {
        Function<String, Integer> parseIntMethodRef = Integer::parseInt;
        System.out.println(parseIntMethodRef.apply("123"));  // 출력: 123
    }
}

 


인스턴스 메서드 참조

메서드 참조 사용 ❌

import java.util.Arrays;
import java.util.List;

public class InstanceMethodReferenceExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("Java", "Python", "C++");
        words.forEach(word -> System.out.println(word.toLowerCase()));
    }
}

 

메서드 참조 사용 ✅

import java.util.Arrays;
import java.util.List;

public class InstanceMethodReferenceExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("Java", "Python", "C++");
        words.forEach(String::toLowerCase);
    }
}

생성자 참조 

 

생성자도 일종의 메소드 이기 때문에 메서드 참조가 가능합니다.

 

리턴값이 단순히 객체를 생성하는 것이기 때문에 적용이 가능한 것입니다.

 

대신 생성자는 고유 메서드명이 없기 때문에 new로 표시합니다.

 

메서드 참조 사용 ❌

import java.util.function.Function;

public class ConstructorReferenceExample {
    public static void main(String[] args) {
        Function<String, StringBuilder> stringBuilderCreator = s -> new StringBuilder(s);
        StringBuilder sb = stringBuilderCreator.apply("Hello");
        System.out.println(sb.toString());  // 출력: Hello
    }
}

 

메서드 참조 사용 ✅

import java.util.function.Function;

public class ConstructorReferenceExample {
    public static void main(String[] args) {
        Function<String, StringBuilder> stringBuilderCreator = StringBuilder::new;
        StringBuilder sb = stringBuilderCreator.apply("Hello");
        System.out.println(sb.toString());  // 출력: Hello
    }
}

 

 

위 예제들을 통해 메서드 참조(더블 콜론 ::)가 람다 표현식을 더욱 간결하게 표현할 수 있는지 알 수 있었습니다.