베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 함수형인터페이스
    • 이펙티브자바
    • 운영체제
    • dfs
    • leetcode
    • C++
    • Spring
    • BFS
    • jpa
    • 스레드
    • 데이터베이스
    • 토비스프링
    • 백준
    • java
    • 자바8
    • 알고리즘
    • 스프링
    • 스프링시큐리티
    • 자바
    • 코드업

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    개발서적/Effective Java

    [Effective Java] 스트림은 주의해서 사용하라

    2023. 5. 31. 23:09

    스트림의 등장

    스트림 API는 다량의 데이터 처리 작업(순차 or 병렬)을 돕고자 자바 8에 추가되었다. 이 API가 제공하는 추상 개념 중 핵심은 두 가지다.

    스트림

    스트림은 데이터 원소의 유한 혹은 무한 시퀀스를 뜻한다.

    스트림 파이프라인

    스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다. 소스 스트림에서 시작해 종단 연산으로 끝나며 중간에 하나 이상의 중간 연산이 들어갈 수 있다. 스트림 파이프라인은 지연평가 된다. 평가는 종단 연산이 호출될 때 이뤄지며, 종단 연산에 쓰이지 않는 데이터 원소는 계산이 쓰이지 않는다.

    스트림의 단점

    1. 람다에서는 final이거나 사실상 final인 변수만 읽을 수 있고, 지역변수를 수정하는 건 불가능하다.
    2. 코드 블럭에서는 return, break, continue를 사용하거나 예외를 던질 수 있다. 하지만 람다는 불가능하다.

    스트림의 사용 후보

    1. 원소들의 시퀀스를 일관되게 변환한다.
    2. 원소들의 시퀀스를 필터링한다.
    3. 원소들의 시퀀스를 하나의 연산을 사용해 결합한다(더하기, 연결하기, 최솟값 구하기 등)
    4. 원소들의 시퀀스를 컬렉션에 모은다(공통된 속성을 기준으로 묶어 가며)
    5. 원소들의 시퀀스에서 특정 조건을 만족하는 원소를 찾는다.

    TIP

    1. 람다에서는 타입 이름을 자주 생략하므로 매개변수 이름을 잘 지어야 스트림 파이프라인의 가독성이 유지된다.
    2. 도우미 메서드를 적절히 활용하는 일의 중요성은 일반 반복코드에서보다는 스트림 파이프라인에서 훨씬 크다.
    3. char값들을 처리할 때는 스트림을 사용하지 않는 편이 좋다.
      -> (int값으로 출력하기 때문에 명시적인 형변환이 필요하다.)
    4. 스트림을 반환하는 메서드 이름은 원소의 정체를 알려주는 복수 명사로 쓰는 것이 좋다.
    저작자표시 비영리 변경금지 (새창열림)
      '개발서적/Effective Java' 카테고리의 다른 글
      • [Effective Java] 스트림 병렬화는 주의해서 적용하라
      • [Effective Java] 스트림에서는 부작용 없는 함수를 사용하라
      • [Effective Java] 표준 함수형 인터페이스를 사용하라
      • [Effective Java] 람다보다는 메서드 참조를 사용하라
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바