반응형

메서드 참조(method reference)

  • 하나의 메서드만 호출하는 람다식은 '메서드 참조'로 간단히 할 수 있다.

메서드 참조는,
람다식을 더 간단히 한 것이다.
람다식도 메서드를 줄여서 쓴것이므로 간단하지만, 메서드 참조로 더 간단히 할 수 있다.

메서드 참조는 클래스이름::메서드이름 이렇게 사용한다.

메서드 참조에는 3가지가 있다.

  • static메서드 참조
  • 인스턴스메서드 참조
  • 특정 객체 인스턴스메서드 참조 (이건 거의 사용 안함)

ClassName::method 는 메서드 참조라는 것을 기억하자.

 

  • static메서드 참조

static메서드 참조 케이스에 대해서 알아보자.

예를 들어서 이러한 method가 있을 때,
String s 넣으면 Integer.parseInt(s)를 해서 Integer를 반환해준다.

그런데 이 method가 하는 일이 단지 Integer.parseInt(s)를 호출하는 것이다.

즉, int result = obj method("123");은
int result = Integer.parseInt("123); 이렇게 써도 된다.

그래서 Integer.parseInt(s); 부분을 람다식으로 바꾸면 아래와 같이 될 것이다.

Function<String, Integer> f = (String s) -> Integer.parseInt(s); 에서 (String s)는 없어도 된다.
왜냐하면 입력 정보가 있기 때문이다.

그래서 결국은 더 간단히 해서 Integer.parseInt(s)만 남는 것이다.

Integer::parseInt 이렇게 메서드 참조를 하는 것이다.

핵심은, 메서드 참조는 클래스이름::메서드 이름 이라는 것이다.
이렇게 할 수 있는 이유는, 함수형 인터페이스에 입력 출력 정보가 다 있기 때문이다.
메서드 참조와 람다식을 자유자재로 서로 바꿔보는 연습을 하면 좋다.

[Ex14_0_b]

 


 

생성자의 메서드 참조

  • 생성자와 메서드 참조

Supplier는 입력이 없고 객체를 생성해서 주는 함수이다

보통 Function같은 경우에는 Function<입력T, 출력R>인데,
Supplier는<출력MyClass> 이렇게 입력이 없이 출력만 있는 것이다.
위 코드는 MyClass 객체를 주는 것이다.

매개변수가 없는 생성자이므로 객체만 생성해서 주면 된다.
그러한 람다식인 것이다.

이것을 아래와같이 짧게 쓸 수 있다.

입력이 없으므로 이렇게 쓸 수 있다.

 

만약에 매개변수가 1개 있는 생성자이면,
객체를 생성할 때, i값을 줘야할 것이다.

이렇게 작성해줄 수 있다.

그리고 만약에 매개변수가 2개 있는 생성자이면, BinFunction<T, U, R>을 사용하면 된다.

 

  • 배열과 메서드 참조

배열을 생성할 때 배열 길이가 꼭 필요하다. 그래서 Function을 써야한다.
Function<Integer, int[]> f= x -> new int[x]; 에서 Integer는 x 즉 배열길이이다.

배열 길이를 주면, 그 길이에 해당하는 int 배열을 만들어준다.

이것도 마찬가지로 입력정보가 <Integer, int[]>에 써있으므로 메서드 참조로 써줄때는 필요없다

[예제]

반응형

'JAVA' 카테고리의 다른 글

스트림 만들기  (0) 2022.11.15
스트림, 스트림의 특징  (0) 2022.11.14
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스  (0) 2022.08.04
java.util.function 패키지  (0) 2022.08.01
함수형 인터페이스  (0) 2022.07.30