반응형
해당 포스팅은 자바의 정석 인터넷 강의를 참고하여 작성한 글입니다.
필요하시다면 강의를 추가로 참고하셔도 될 것 같습니다 : )
메서드 참조
- 하나의 메서드만 호출하는 람다식을 '메서드 참조(method reference)'로 더 간단히 한 것.
- 사용방법 → 클래스 이름::메서드 이름
- static메서드 참조 / 인스턴스 메서드 참조만 알고 있으면 된다.
static 메서드 참조
Integer method(String s) {
return Integer.parseInt(s);
}
---------------------- 위와 동일한 람다식 ------------------------
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
-------------------- 위와 동일한 메서드 참조 ---------------------
Function<String, Integer> f = Integer::parseInt; //메서드 참조
- Function<String, Integer>에서 입출력 타입과 입력받는 개수를 알고 있으므로 뒤에서는 생략할 수 있다고 본다.
- 입력: String
- 출력 : Integer
static 메서드 참조 예시
- 인터페이스 함수
@FunctionalInterface
public interface MyAdd {
int add(int x, int y);
}
- 두 개의 매개 변수 합산을 반환하는 MathUtils 클래스
public class MathUtils {
public static int AddElement(int x, int y) {
return x + y;
}
}
- 람다식을 사용하는 방법과 메서드 참조를 이용하는 방법
public class Main {
public static void main(String args[]) {
System.out.println("Lamda");
MyAdd addLambda = (x, y) -> MathUtils.addElement(x, y);
System.out.println(addLambda.add(10,20));//30
System.out.println("Method Reference");
MyAdd addMethodRef = MathUtils::AddElement;
System.out.println(addMethodRef.add(20,40));//60
}
}
※ Object 인스턴스 메서드 참조
- MathUtils 클래스의 AddElement() 메서드를 비정적 메서드로 변경하고 객체를 생성하여 사용
생성자 메서드 참조
- Supplier - 입력은 없고 출력만 있다.
Supplier<MyClass> s = () -> new MyClass(); //매개변수 없는 경우
Function<Integer, MyClass> s = (i) -> new MyClass(i); //매개변수 하나인 경우
--------- 위와 동일한 메서드 참조 ----------
Supplier<MyClass> s = MyClass::new;
Function<Integer, MyClass> s = MyClass::new;
배열과 메서드 참조
- 많이 사용하는 방법이다.
Function<Integer, int[]> f = x -> new int[x]; //람다식
Function<Integer, int[]> f2 = int[]::new; //메서드 참조
참고
반응형
'Java' 카테고리의 다른 글
Stream 생성하기 - 배열/난수/정수/람다식/파일/empty (0) | 2023.02.06 |
---|---|
스트림(Stream)과 스트림의 특징 (0) | 2023.02.03 |
Predicate 결합 방법 / 컬렉션과 함수형 인터페이스 사용 (0) | 2023.02.01 |
함수형 인터페이스 - java.util.function 패키지 (0) | 2023.02.01 |
[Java] 람다식과 작성 방법 - 함수형 인터페이스 사용 (매개변수, 반환타입) (0) | 2023.01.31 |