OOP가 그냥 커피라면 FP는 T.O.P야 (2)

이지훈·2023년 8월 25일

1. 시작에 앞서..

Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능합니다.

하지만 JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서
Java를 이용해 함수형으로 프로그래밍할 수 있는 API 들을 제공해주고 있습니다.

2. Stream 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를 활용하면 코드의 라인수가 줄어들고, 가독성도 높일 수 있다.

3. Stream API의 특징

  • 원본 데이터를 그대로 유지한다.
    -Stream API는 원본 데이터로 부터 복사본을 만들어 처리합니다.

  • 일회용이다.

  • 내부 반복으로 작업을 처리한다.
    -기존에는 반복문을 사용하기 위해서 for이나 while 등과 같은 문법을 사용해야 했지만,
    stream에서는 반복 메소드를 제공하고 있습니다.

4. 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번만 처리 가능합니다.

5. 마무리

다음 글 에서는 가공과 결과 제공에 필요한 메소드를 알아보기 전에 람다식과 함수형 인터페이스를 알아보고자 합니다.

0개의 댓글