반응형
Java 함수형 인터페이스와 스트림 API 요약
이 문서는 오늘 배운 함수형 인터페이스와 스트림 API 메소드를 요약합니다.
1. 함수형 인터페이스
함수형 인터페이스는 람다 표현식과 함께 사용되도록 설계된, 단일 추상 메소드를 가진 인터페이스입니다.
가. Function<T, R>
- 목적:
T타입의 인자를 받아R타입의 결과를 반환합니다. - 메소드:
apply(T t) - 예제:
Function<Integer, Integer> function = x -> x * 2; System.out.println(function.apply(3)); // 출력: 6
나. Supplier<T>
- 목적: 결과물을 공급하는 역할을 합니다. 인자 없이
T타입의 결과를 반환합니다. - 메소드:
get() - 예제:
Supplier<Double> supplier = () -> Math.random(); System.out.println(supplier.get());
다. Consumer<T>
- 목적: 단일 입력 인자를 받아들이고 결과를 반환하지 않는 연산을 나타냅니다.
- 메소드:
accept(T t) - 예제:
Consumer<String> consumer = (str) -> System.out.println(str); consumer.accept("안녕하세요");
라. Predicate<T>
- 목적: 하나의 인자에 대한 boolean 값을 반환하는 함수(술어)를 나타냅니다.
- 메소드:
test(T t) - 예제:
Predicate<Integer> predicate = x -> x % 2 == 0; System.out.println(predicate.test(4)); // 출력: true
2. 스트림 API
스트림 API는 객체 컬렉션을 함수형 스타일로 처리하는 데 사용됩니다.
가. forEach()
- 목적: 스트림의 각 요소에 대해 작업을 수행합니다.
- 예제:
numbers.stream().forEach(x -> System.out.println(x));
나. map()
- 목적: 스트림의 각 요소를 다른 객체로 변환합니다.
- 예제:
List<Integer> doubled = numbers.stream().map(x -> x * 2).collect(Collectors.toList());
다. filter()
- 목적: 주어진 조건(predicate)에 따라 스트림의 요소를 필터링합니다.
- 예제:
numbers.stream().filter(x -> x % 2 == 0).forEach(System.out::println);
라. sorted()
- 목적: 스트림의 요소를 정렬합니다.
- 예제:
numbers.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
마. distinct()
- 목적: 스트림에서 중복된 요소들을 제거한 스트림을 반환합니다.
- 예제:
List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());
바. limit()
- 목적: 스트림의 길이를
maxSize이하로 제한합니다. - 예제:
numbers.stream().limit(5).forEach(System.out::println);
사. reduce()
- 목적: 스트림의 요소에 대해 연관 누적 함수를 수행하고 선택적 결과를 반환합니다.
- 예제:
int sum = numbers.stream().reduce(0, (acc, val) -> acc + val); int product = numbers.stream().reduce(1, (acc, val) -> acc * val);
[ 람다 표현식 ]
1. 정의 : 익명 함수를 간결하게 표현하는 방법
- JAVA8 이상 문법 : ( ) -> { }
- JS 문법 : ( ) => { }
2. 목적 : 메소드 선언 없이 구현부만 간단하게 작성
3. 사용처 :
1) 스트림 API 2) JAVAGUI
4. 주요 인터페이스
Function< T, R > : T 입력 받아서 R 결과를 반환 , apply(T) 메소드 사용
Supplier< T > : 입력 없이 T 결과를 반환 , get()메소드 사용
Consumer< T > : T 입력 받아서 결과가 없음 , accept(T)메소드 사용
Predicate< T > : T 입력 받아서 결과를 true/false 반환 , test(T) 메소드 사용
5. 활용
1) 추상메소드 구현체
2) 컬렉션 프레임워크
[ 스트림API ]
1. 정의 : 데이터의 연속된 흐름 처리하는 방식 지원
2. 흐름 : [ 데이터들 ] ------> [ 중간 연산 ] ------> [ 최종연산 ]
3. 주요 연산
1) 중간 연산
map , filter , sorted , distinct , limit 등
2) 최종 연산
forEach , collect , reduce 등등
반응형
'백엔드 > 자바' 카테고리의 다른 글
| [JAVA] 자바 기초 핵심 정리 (0) | 2025.09.16 |
|---|---|
| [JAVA] 스레드 Thread 정리 (5) | 2025.07.31 |
| [JAVA] 컬렉션 프레임워크 정리 (2) | 2025.07.31 |
| [JAVA] String 클래스 , Random 클래스, 제네릭 타입 (9) | 2025.07.29 |
| [JAVA] 오브젝트(Object), 클래스(Class), 래퍼(Wrapper), 로컬데이트(LocalDate) 클래스 정리 (4) | 2025.07.25 |