람다식이란?
Java 8부터 추가된 기능인 람다식은 메서드를 익명함수로 정의할 수 있게 해줍니다. 람다식은 코드를 간결화하고, 객체지향언어인 자바를 통해서 함수형 프로그래밍이 가능하도록 하였습니다. 기본적으로 람다식은 아래와 같은 구문으로 이루어집니다.
( 매개변수 ) -> { 수행 코드 }
ex) (int a, int b) -> { return a + b; }
ex) (int a, int b) -> a + b ;
수행 코드가 단일 문장으로 끝나는 경우에는 {} 를 생략하고 바로 반환값을 출력할 수 있다.
함수형 인터페이스
자바에서의 함수형 프로그래밍에서 또 하나 빼놓을 수 없는 개념이 함수형 인터페이스 입니다. 함수형 인터페이스는 하나의 추상메서드만을 가지는 인터페이스로 함수를 객체처럼 다룰 수 있게 하여 람다식과 함께 사용되어 함수형 프로그래밍을 지원합니다. 함수형 인터페이스는 아래와 같이 구현합니다. 함수형 인터페이스는 @FunctionalInterface어노테이션을 명시하여 줍니다. 함수형 인터페이스는 기본적으로 기본 메서드 하나만을 선언할 수 있으나, static 메서드의 경우에는 여러 개를 선언하는 것이 가능합니다.
어* 함수형 인터페이스
함수형 인터페이스로는 앞서 쓰레드 부분에서 사용했던 Runnable, Callable, Comparator, Consumer, Function, Predicate 등이 있습니다.
* Runnable 예시
기존에 Runnable인터페이스를 implements를 사용하여 구현하였던과 다르고 바로 람다식으로 작성하여 사용할 수 있습니다.
- 이전의 코드
- 람다식을 사용한 코드
람다식을 사용한 경우 인터페이스를 구현하기 위해 별도의 클래스를 생성하지 않아도 됩니다.
ex)
* comparator 예시
* Predicate 예시 - Predicate는 조건식의 표현을 위해 사용됩니다.
함수형 인터페이스
- Function <T, R>
- T를 파라미터로 받으며 반환값은 R
- 주로 데이터 변환 시 활용
- Consumer <T>
- T를 파러미터로 받아 작업 수행, 반환값은 없다.
- 주로 데이터 출력 또는 로그를 남기는 데 활용
- Supplier <T>
- 파라미터 없이, 반환값 T
- 주로 난수 생성 이나, 기본값 제공을 위한 작업에 활용
- Predicate <T>
- 파라미터 T를 받으며, 반환값은 boolean
- 주로 조건식에 활용된다.
- BiFunction <T, U, R>
- 파라미터 T, U를 받아 작업 수행 반환값은 R
- BiConsumer <T, U>
- 파라미터 T, U를 받아 작업 수행 반환값은 없음
- UnaryOperator<T>
- 파라미터와 반환값이 타입이 같은 경우, BiFunction<T, T> 와 같다.
- BinaryOperator<T>
- 두 파라미터와 반환값의 타입이 같은 경우 BiFunction<T, T, T> 와 같다.
ex) 참고 코드
* 매개변수와 반환값의 타입이 같은 경우 Function보다 UnaryOperator를 사용하는 것이 더욱 좋은 성능을 보일 수 있다.
* 예시
Collection - boolean remove(Predicate<E> filter) - 조건에 맞는 요소 삭제
Iterable - void forEach(Consumer<T> action) - 모든 요소에 작업 수행(반환값은 없음)
Map - V computeIfAbsent(K key, Function<K, V> f) - 해당 키 존재 시 작업 수행 후 결과 반환
예시 코드
출처
자바의 정석
'JAVA' 카테고리의 다른 글
[ Java ] - QueryDSL이란 무엇인가? (+기본 세팅) (0) | 2024.05.19 |
---|---|
[ Java ] - 입출력 하기, 스트림 종류 및 예시 코드 (0) | 2023.10.30 |
[ Java ] - 난수 생성 (0) | 2023.10.18 |
[ Java ] - 프로세스와 쓰레드 - 02) (0) | 2023.10.17 |
[ Java ] - 프로세스와 쓰레드 - 01) (0) | 2023.10.16 |