
자바 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. 생각
개발하다 보면 뭐가 정답이라는게 모호한 경우가 많다.이럴 때 가장 보편적인 선택 방법은 장점이 단점보다 강세일 때라고 생각한다.
그냥 사용하고 마는 것이 아닌 각 클래스 및 함수를 타고 들어가 기능과 정의를 확인하고 상황에 맞는 개발을 할 수 있도록 노력하자.
'Java' 카테고리의 다른 글
| [Java] 자바 AtomicLong의 사용과 멀티 스레드 (0) | 2023.11.26 |
|---|---|
| [Java] 자바 LocalDatetime, LocalDate, LocalTime 시간 API (0) | 2023.11.26 |
| [Java] NPE(NullPointerException)에 대하여(String NPE) (0) | 2023.09.29 |
| [Java]Map(HashMap)의 전체 데이터를 출력하는 방법 (0) | 2023.09.29 |
| 자바 8 Version(1.8) 정리 (0) | 2023.09.27 |