Java / / 2023. 2. 2. 14:50

메서드 참조(method reference) - 람다식을 더 간단하게

반응형

 

 

해당 포스팅은 자바의 정석 인터넷 강의를 참고하여 작성한 글입니다.

필요하시다면 강의를 추가로 참고하셔도 될 것 같습니다 : )

메서드 참조

  • 하나의 메서드만 호출하는 람다식을 '메서드 참조(method reference)'로 더 간단히 한 것.
  • 사용방법  → 클래스 이름::메서드 이름
  • static메서드 참조 / 인스턴스 메서드 참조만 알고 있으면 된다.

 

static 메서드 참조

Integer method(String s) {
	return Integer.parseInt(s);
}

---------------------- 위와 동일한 람다식 ------------------------
Function<String, Integer> f = (String s) -> Integer.parseInt(s);

-------------------- 위와 동일한 메서드 참조 ---------------------
Function<String, Integer> f = Integer::parseInt; //메서드 참조

 

  • Function<String, Integer>에서 입출력 타입과 입력받는 개수를 알고 있으므로 뒤에서는 생략할 수 있다고 본다.
    • 입력: String
    • 출력 : Integer

 

static 메서드 참조 예시

 

  • 인터페이스 함수
@FunctionalInterface
public interface MyAdd {
	int add(int x, int y);
}

 

  • 두 개의 매개 변수 합산을 반환하는 MathUtils 클래스
public class MathUtils {
	public static int AddElement(int x, int y) {
    	return x + y;
    }
}

 

  • 람다식을 사용하는 방법과 메서드 참조를 이용하는 방법
public class Main {
	public static void main(String args[]) {
    	System.out.println("Lamda");
        MyAdd addLambda = (x, y) -> MathUtils.addElement(x, y);
        System.out.println(addLambda.add(10,20));//30
        
        System.out.println("Method Reference");
        MyAdd addMethodRef = MathUtils::AddElement;
        System.out.println(addMethodRef.add(20,40));//60
    }
}

 

※ Object 인스턴스 메서드 참조

 

  • MathUtils 클래스의 AddElement() 메서드를 비정적 메서드로 변경하고 객체를 생성하여 사용

 

생성자 메서드 참조

  • Supplier - 입력은 없고 출력만 있다.
Supplier<MyClass> s = () -> new MyClass();            //매개변수 없는 경우
Function<Integer, MyClass> s = (i) -> new MyClass(i); //매개변수 하나인 경우

--------- 위와 동일한 메서드 참조 ----------
Supplier<MyClass> s = MyClass::new;
Function<Integer, MyClass> s = MyClass::new;

 

배열과 메서드 참조

  • 많이 사용하는 방법이다.
Function<Integer, int[]> f = x -> new int[x]; //람다식
Function<Integer, int[]> f2 = int[]::new;     //메서드 참조

 


 

참고

 

[Java]메서드 참조(Method reference)

메서드 참조(Method reference)란? Java 8에 도입된 메서드 참조는 class::methodName 구문을 사용하여 클래스 또는 객체에서 메서드를 참조할 수 있습니다. 람다식(Lambda Expression)의 가장 큰 장점 중 하나는

developer-talk.tistory.com

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유