Dev Books/Effective Java32 [item 48] 스트림 병렬화는 주의해서 적용하라. 동시성 처리동시성 프로그래밍(Concurrency Programming)이란, 여러 작업(Task)을 논리적으로 동시에 처리할 수 있도록 만드는 프로그래밍 방식이다. 즉, 한 번에 여러 작업이 병렬 또는 번갈아 수행되도록 작성하는 방식이다. 동시성 프로그래밍 측면에서 자바는 항상 앞서갔다.처음 릴리스된 1996년부터 스레드 동기화, wait/notify를 지원했다.Java 5: java.util.concurrent 패키지와 Executor 프레임워크 도입.Java 7: Fork/Join 프레임워크 추가.Java 8: Stream API를 통한 병렬 처리(parallel stream) 지원.자바는 동시성 프로그래밍을 꾸준히 지원하는데, 동시성 프로그래밍을 할 때는 안정성과 응답 가능 상태를 유지를 해야.. 2025. 7. 16. [item 47] 반환 타입으로는 스트림보다 컬렉션이 낫다 Java 8 이전(즉, Java 7까지)Java 7까지는 Stream API가 존재하지 않았기 때문에, 메서드에서 여러 원소(시퀀스)를 반환해야 할 때 사용할 수 있는 타입은 다음과 같았다. Collection(인터페이스): 여러 값을 담는 일반적인 컬렉션 타입. 예: ArrayList, HashSet 등Set, List: Collection의 하위 타입Iterable: for-each 문에서 순회할 수 있는 최소 요건을 가진 타입배열: String[], int[] 같은 고전적인 방식특별한 이유가 없다면, 보통은 Collection이나 그 하위 타입 (List, Set)을 반환 타입으로 선택했다.Collection이 다양한 유용한 메서드를 제공하기 때문이다.예: size(), contains(), isE.. 2025. 7. 15. [item 46] 스트림에서는 부작용 없는 함수를 사용하라 1. stream스트림은 그저 또 하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임이다. 스트림이 제공하는 표현력, 속도, (상황에 따라서는) 병렬성을 얻으려면 패러다임까지 함께 받아들어야 한다.stream paradigm스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 부분이다. 이때 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수함수여야 한다. 순수함수순수함수란 오직 입력만이 결과에 영향을 주는 함수를 말한다.다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다.즉, 같은 입력에 대해서는 항상 같은 출력을 보장하며, 부작용(side effect)이 없다. 예를 들어 아래 함수는 순수 함수이다. 순수 함수 예시 (P.. 2025. 7. 11. [item 45] 스트림은 주의해서 사용하라 Stream APIStream API는 다량의 데이터 처리 작업을 돕고자 자바 8에 추가되었다. 이 API가 제공하는 추상 개념 중 핵심은 두가지다.데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 뜻한다.stream pipeline은 이 원소들은 어디로부터든 올 수 있다.대표적으로는 컬렉션, 배열, 파일, 정규표현식 패턴 matcher, 난수 생성기, 다른 스트림이 있다. 스트림 안의 데이터 원소들은 객체 참조나 기본 타입 값이다. 기본 타입 값으로는 int, long, double 이렇게 3가지를 지원한다.stream pipeline스트림 파이프라인은 다음 3단계로 구성된다. 스트림 파이프라인은 소스 스트림에서 시작해 종단 연산(terminal operation)으로 끝나며, 그 .. 2025. 7. 9. 이전 1 2 3 4 5 ··· 8 다음