람다 표현식에서 메서드 호출 1회로 코드가 끝나는 경우 메서드 레퍼런스를 이용하면 코드를 더 줄일 수 있다.
docs.oracle.com/javase/8/docs/api/java/util/function/Function.html
Function<R, T> 라는 인터페이스가 있다.
R을 파라미터로 입력받아 T로 반환하는 apply() 추상메소드가 있는 함수 인터페이스이다.
Function<String, Integer> func = str -> Integer.parseInt(str);
람다식을 사용하여 일급 객체로 만들면 이렇게 할 수 있다.
System.out.println(func.apply("15"));
Integer integer = func.apply("15");
이렇게 출력하거나 값을 저장할 수 있을 것이다.
람다의 메서드 구현부분이 한번으로 끝나면 메서드 레퍼런스를 쓸 수 있다.
Function<String, Integer> func = str -> Integer.parseInt(str);
Function<String, Integer> func = Integer::parseInt;
이 두 코드는 같은 역할을 한다.
parseInt라는 함수에서 쓸 수 있는 매개변수는 String str 하나밖에 없고, 리턴 타입은 제네릭을 이용하여 Integer형을 반환해야하는 것을 알 수 있다. 따라서 컴파일러가 매개변수와 반환값에 대해 자동으로 처리해 줄 수 있다.
[클래스::메서드]의 형태를 가지며,
- Static 메소드 레퍼런스 클래스::메소드 Integer::parseInt
- Instance 메소드 레퍼런스 클래스::메소드 String::length, Car::getName
- 기존 객체의 메소드 레퍼런스 객체명::메소드 sonata::getName
- Constructor 메소드 레퍼런스 클래스::new Car::new
등이 있다.
'Java' 카테고리의 다른 글
인터페이스 vs 추상 클래스 (0) | 2020.12.18 |
---|---|
JAVA8) 스트림 API (0) | 2020.12.11 |
JAVA8) 람다 표현식 (0) | 2020.12.11 |
JAVA8) 함수형 인터페이스 (0) | 2020.12.11 |
함수형 인터페이스 (0) | 2020.12.11 |