본문 바로가기

Java

JAVA8) 메소드 레퍼런스

람다 표현식에서 메서드 호출 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

등이 있다.

 

 

digitalbourgeois.tistory.com/48

'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