메서드 참조, 생성자의 메서드 참조
메서드 참조(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 |
댓글
이 글 공유하기
다른 글
-
스트림 만들기
스트림 만들기
2022.11.15 -
스트림, 스트림의 특징
스트림, 스트림의 특징
2022.11.14 -
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스
2022.08.04 -
java.util.function 패키지
java.util.function 패키지
2022.08.01