책/모던 자바 인 액션
3장 람다 표현식
sami355
2024. 6. 5. 16:09
❗ 본 포스팅은 타이핑 공부법으로 작성하였습니다. 그렇기에 부족한 점이 존재할 수 있습니다.
3.1 람다란 무엇인가
- 익명 함수를 단순화한 것
- 람다함수에는 파라미터, 바디, 리턴값, 발생할 수 있는 예외 리스트를 가질 수 있다.
3.2 어디에, 어떻게 람다를 사용할까
- 함수형 인터페이스를 이용해서 람다를 이용할 수 있다.
- 함수형 인터페이스는 추상메소드 하나만을 가지는 인터페이스를 말한다.
- 함수 디스크럽터는 추상메소드의 시그니처를 의미한다.
- 람다(함수)를 함수형 인터페이스의 인스턴스라고 생각하면 된다.
3.3 람다 활용: 실행 어라운드 패턴
- 함수형 인터페이스를 선언하고(혹은 미리 만들어져 있는 Predicate, Function, Supplier, Consumer와 같은 함수형 인터페이스를 이용해도 좋다.) 람다를 인자로 받고 싶어하는 메서드의 인자에 넣는다.
- 해당 메서드에서는 함수형 인터페이스에 존재하는 추상메소드를 이용하면 된다.
- 해당 메소드를 호출할때는 추상 메소드의 형식에 맞게 구현하면 된다.
3.4 함수형 인터페이스 사용
- Predicate<T>는 test 메소드를 지원하며 T타입의 인자를 받아 boolean 형식의 반환값을 가진다.
- Consumer<T>는 accept 메소드를 지원하며 T타입의 인자를 받아 void를 반환한다.
- Function<T, R>는 apply 메소드를 지원하며 T타입의 인자를 받아 R타입의 반환형식을 가진다.
- generic에는 primitive 타입이 들어갈수 없다.
3.5 형식 검사, 형식 추론, 제약
- 람다식의 기본 문법은 다음과 같다.
- (Integer a) -> {return a + 1;}
- 이때 파라미터의 형식을 추론 가능하면 형식을 생략할 수 있다.
- (a) - > {return a + 1;}
3.6 메서드 참조
- 자바 8부터 기존 메서드의 함수도 메서드 참조로 람다처럼 쓸 수 있다.
- Integer::parseInt 처럼 쓸 수 있다.
3.8 람다 표현식을 조합할 수 있는 유용한 메서드
- 자바에서는 함수(람다)의 출력값을 다른 함수(람다)의 입력값을 줄 수 있는 방법이 존재한다.
- 일종의 메서드 체이닝과 같다 생각하면 될 듯
- 자바에서 미리 제공하는 Predicate와 Function은 조합을 제공한다.
- Predicate는 negate(), and(), or() 메소드를 제공한다.
- Function은 andThen(), compose() 메소드 두개를 제공한다.