Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능합니다.
하지만 JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서
Java를 이용해 함수형으로 프로그래밍할 수 있는 API 들을 제공해주고 있습니다.
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
// 적용 전
for (Integer integer : list) {
System.out.println("integer = " + integer);
}
// 적용 후
list.stream().forEach(System.out::println);
이와 같이 Stream API를 활용하면 코드의 라인수가 줄어들고, 가독성도 높일 수 있다.
원본 데이터를 그대로 유지한다.
-Stream API는 원본 데이터로 부터 복사본을 만들어 처리합니다.
일회용이다.
1. 생성하기
2. 가공하기
3. 결과제공
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
list
.stream() // 생성
.map(~~) // 가공
.filter(~~) // 가공
.count(); // 결과도출
1. 생성하기
Stream 연산을 하기 위해서는 먼저 Stream 객체를 생성해주어야 합니다.
배열, 컬렉션, 임의의 수, 파일 등 거의 모든 것을 가지고 스트림을 생성할 수 있습니다.
스트림은 일회성이기 때문에 닫혔을 경우 다시 생성해야 합니다.
2. 가공하기
원본 데이터를 별도의 데이터로 가공하기 위한 중간 단계입니다.
중간 연산의 반환값은 Stream이기 때문에 원하는 만큼 중간 연산을 체인 형태로 사용할 수 있습니다.
3. 결과 제공
가공된 데이터로부터 원하는 결과를 얻기 위한 최종 연산입니다.
가공 연산과는 다르게 1번만 처리 가능합니다.
다음 글 에서는 가공과 결과 제공에 필요한 메소드를 알아보기 전에 람다식과 함수형 인터페이스를 알아보고자 합니다.