람다식의 메서드 참조
람다식이 단 하나의 메서드만 호출하는 경우, 메서드 참조(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의 정석 (남궁 성 지음)
반응형
'프로그래밍 언어 > JAVA(자바)' 카테고리의 다른 글
[자바/java] Optional<T> 클래스란? (1) | 2021.05.24 |
---|---|
[자바/java] 자바 문자열 배열을 문자열로 변환하기/바꾸기 (반대 과정 포함) (0) | 2021.05.15 |
[자바/java] 람다식(Lambda) 정리하기 (3. 람다식의 다양한 형태) (0) | 2021.05.07 |
[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 응용) (0) | 2021.04.15 |
[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 기본) (0) | 2021.04.12 |