코딩 기록들
[Java Stream Programming] 2. 메소드 레퍼런스 본문
함수로 보내는건 : 람다식 / 메소드로 보내는건 : 메소드 레퍼런스
- 메소드 레퍼런스를 이용하면, 기존의 메소드를 파라미터로 전달 할 수 있음
- 메소드의 파라미터에 함수형 인터페이스가 정의되어 있을 때, 메소드 레퍼런스를 인자로 전달할 수 있음
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