자바/람다식

메서드 참조

백_곰 2022. 4. 12. 15:45

1. 메서드 참조란?

- 메서드 참조는 람다식보다 더욱 간결하게 표현할 수 있는 방법이다. 그러나, 매번 적용할 수 있는 것이

아니고, 람다식이 하나의 메서드만 호출하는 경우에 해당된다.

 

 

- 총 3가지 경우의 메서드 참조가 있는데, 아래의 예시 코드를 보고 이해하자.

(1) static 메서드 참조

: 람다식은 "(x) -> ClassName.method(x)" 이다.

: 메서드 참조는 "ClassName::method" 이다.

 

 

 

(2) 인스턴스 메서드 참조

: 람다식은 "(obj, x) -> obj.method(x)" 이다.

: 메서드 참조는 "ClassName::method" 이다.

 

 

 

(3) 특정 객체 인스턴스메서드 참조

: 람다식은 "(x) -> obj.method(x)" 이다.

: 메서드 참조는 "obj::method" 이다.

 

MyClass obj = new MyClass();

 

Function<String, Boolean> f1 = (x) -> obj.equals(x)

//람다식

 

Function<String, Boolean> f2 = obj::equals;

//메서드 참조

 

 

 

- 하나의 메서드만 호출하는 람다식은 아래와 같이 바꿀 수 있다.

(1) 클래스이름::메서드이름

(2) 참조변수::메서드이름

 

 

 

 

2. 생성자의 메서드 참조

- 생성자를 호출하는 람다식도 메서드 참조로 변환할 수 있다.

 

Supplier<MyClass> s1 = () -> new MyClass();

//람다식

 

Supplier<MyClass> s2 = MyClass::new;

//메서드 참조

 

( 매개변수와 상관없이 메서드 참조의 형식은 모두 똑같다. )

 

 

- 배열은 아래와 같이 해주면 된다.

 

Function<Integer, int[]> f1 = x -> new int[x];

//람다식

 

Function<Integer, int[]> f2 = int[]::new;

//메서드 참조