자바 Stream API는 배열 또는 컬렉션 인스턴스에 함수를 조합하여 필터링, 가공 등을 통하여 결과를 얻을 수 있다.

또한 람다를 사용하여 가독성 증가 및 간결하게 표현 가능하다. for 또는 foreach가 아닌 함수형 처리가 가능하다.


1. 개요

1-1. 자바 8 이후 Stream API를 통한 배열처리가 가능하다.

1-2. 실습과 예제 코드로 배열의 처리 방법을 비교해보자.

 

2. 요구사항

2-1. 사용자별 등급(Grade), 비용(Cost) 존재

2-2. 사용자 배열을 등급에 따라 비용에 할인을 적용

 

3. 실습

3-1. 비즈니스 처리에 사용될 클래스

@Getter
@Setter
public class Member {
    private Long id;
    private String name;
    private Grade grade;
    private int cost;

    public Member(Long id, String name, Grade grade, int cost) {
        this.id = id;
        this.name = name;
        this.grade = grade;
        this.cost = cost;
    }
}
public enum Grade {
    BASIC
    , VIP
}
List<Member> memberList = new ArrayList<>();
memberList.add(new Member(1L,"memberBASIC", Grade.BASIC, 15000));
memberList.add(new Member(2L,"memberVIP", Grade.VIP, 15000));

3-2. for을 사용

        for (int i = 0; i < memberList.size(); i++) {
            Member member = memberList.get(i);
            if(Grade.VIP.equals(member.getGrade())){
                member.setCost((int) (member.getCost()*0.5));
                memberList.set(i,member);
            }
        }

3-3. stream을 사용

  • 사용한 함수보다 더 많은 stream 함수가 있으니 API 문서를 참고하여 활용해 보자.
        memberList.stream()
                .filter(m->Grade.VIP.equals(m.getGrade()))
                .forEach(m->m.setCost((int) (m.getCost()*0.5)));

 

4. 결론

4-1. for의 강점

  • for문은 단순 인덱스 기반
  • stream보다 빠르고 오버헤드 발생이 없다

4-2. stream의 강점

  • stream의 제공 함수들의 활용으로 가독성이 좋아진다.
  • 함수형 프로그램으로 전환이 용이하다.
  • 코딩 스타일의 일관성을 가질수 있다.

4-3. 생각

개발하다 보면 뭐가 정답이라는게 모호한 경우가 많다.이럴 때 가장 보편적인 선택 방법은 장점이 단점보다 강세일 때라고 생각한다.

그냥 사용하고 마는 것이 아닌 각 클래스 및 함수를 타고 들어가 기능과 정의를 확인하고 상황에 맞는 개발을 할 수 있도록 노력하자.

+ Recent posts