프로그래밍 언어/JAVA(자바)

[자바/java] 람다식(Lambda) 정리하기 (4. 메서드 참조)

냠냠:) 2021. 5. 10. 23:45

람다식의 메서드 참조

람다식이 단 하나의 메서드만 호출하는 경우, 메서드 참조(method reference)라는 방법으로 람다식을 간략히 할 수 있다. 

Function<String, Integer> f = s -> Integer.parseInt(s);

 

 

 위 기능을 풀어서 쓰면 아래와 같다.

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

 

 

parseInt 메서드는 그냥 자바의 문법이고, 그냥 Integer.parseInt 메서드를 반환할 뿐이다. 이 기능은 람다식에서는 아래와 같이 간단히 작성할 수 있다.

Function<String, Integer> f = Integer::parseInt;

 

람다식의 일부가 생략되었지만, 컴파일러는 생략된 부분을 우변의 parseInt 메서드의 선언부로부터, 또는 좌변의 Function 인터페이스에 지정된 제네릭 타입으로부터 쉽게 알아낼 수 있다.

 

 

이렇게 메서드를 참조할 수 있는 방법을 알아 봤는데 메서드 참조를 사용할 수 있는 경우가 한 가지 더 있다.

이미 생성된 객체의 메서드를 람다식에서 사용한 경우에는 클래스 이름 대신 그 객체의 참조변수 이름을 적어주는 것이다.

//equals 람다식, 메서드 참조
String str = new String("나는 참조변수");

Function<String, Boolean> equals = s -> str.equals(s);	//람다식

Function<String, Boolean> equals2 = str::equals;	//메서드 참조
하나의 메서드만 호출하는 람다식은 "클래스이름::메서드이름 or 참조변수::메서드이름"으로 바꿔 사용할 수 있다.

예제

생성자 호출

//객체 생성 
Supplier<String> s = () -> new String();		//람다식

Supplier<String> s2 = String::new;			//메서드 참조

 

 

매개변수가 있는 생성자 호출

//매개변수 지정
Function<String, String> s = str -> new String(str);	//람다식

Function<String, String> s2 = String::new;		//메서드 참조

 

 

두 개의 매개변수가 있는 메서드

//진수 변환 
BiFunction<String, Integer, Integer> parseInt = (str, num) -> Integer.parseInt(str, num);	//람다식
		
BiFunction<String, Integer, Integer> parseInt2 = Integer::parseInt;				//메서드 참조

 

 

배열 생성

//배열 생성
Function<Integer, int[]> arr = x -> new int[x];		//람다식

Function<Integer, int[]> arr2 = int[]::new;		//메서드 참조

 

 

 

 

[개인 공부를 위한 정리입니다. 참고용으로만 활용하세요]

Reference

Java의 정석 (남궁 성 지음)



반응형