코딩 기록들

[Java Stream Programming] 2. 메소드 레퍼런스 본문

카테고리 없음

[Java Stream Programming] 2. 메소드 레퍼런스

코딩펭귄 2024. 2. 7. 09:27

함수로 보내는건 : 람다식 / 메소드로 보내는건 : 메소드 레퍼런스

 

- 메소드 레퍼런스를 이용하면, 기존의 메소드를 파라미터로 전달 할 수 있음

- 메소드의 파라미터에 함수형 인터페이스가 정의되어 있을 때, 메소드 레퍼런스를 인자로 전달할 수 있음

Employees::isManagerIs100);

Employees에 있는 isManager 메소드 : 이코드는 이후 JVM에서 람다형식으로 바뀌어서 전달됨

(Employee) -> employee.manager() == 100 으로 바뀌어서 전달될것

 

람다와 메소드레퍼런스 단축표현 예제

- 메소드 전후로만 :: 으로 구분함

- 실행시키지 않아도 자동으로 전달됨

 

메소드레퍼런스 만드는 3가지 방법

1. 정적(static) 메소드 레퍼런스 

- Integer.parseInt()메소드는 Integer::parseInt 로 표현

2. 다양한 형식의 인스턴스 메소드레퍼런스

- String.length()메소드는 String::length로 표현

3. 기존객체의 인스턴스 메소드 레퍼런스

Employees객체를 할당받은 employee 라는 변수가 있고, Employees에 getSalary() 라는 메소드가 있다면 : employee::getSalary 로 표현함( 클래스 employee::getSalary 로 표현하는게 더 효율)

 

3가지 종류의 람다표현식을 메소드 레퍼런스로 바꾸는 방법
  • 람다1 - (args) -> ClassName.staticMethod(args)
  • 메서드레퍼런스1 - ClassName::staticMethod
  • 람다2 - (arg0, rest) -> arg0.instanceMethod(rest)  -- (arg0은 ClassName 형식)
  • 메서드레퍼런스2 - ClassName::instanceMethod
  • 람다3 - (args) -> expr.instanceMethod(args)
  • 메서드레퍼런스3 - expr::instanceMethod