스트림 병렬화는 주의해서 적용하라 주류 언어 중 자바는 동시성 프로그래밍 측면에서 항상 앞서왔습니다. 처음 릴리즈된 1996년부터 스레드, 동기화, wait/notify를 지원했습니다. 자바로 동시성 프로그램을 작성하기는 쉬워지지만 올바르고 빠르게 작성하는 일은 여전히 어려운 작업입니다. 동시성 프로그래밍을 할때는 안전성과 응답 가능 상태를 유지하기 위해 노력해야하며, 병렬 스트림 파이프라인 프로그래밍에서도 다를바 없습니다. 🧨 Stream API의 병렬화에 문제가 있는 경우 아래 예제는 메르센 소수를 20개 생성하는 코드인데 여기서 parallel() 메서드를 호출해서 여러개의 스레드를 활용해 동시성 프로그래밍으로 효율을 높힐 수 있다고 추측할 수 있지만 실제로 1시간이 넘어도 출력하지 못하는 응답 불..
반환 타입으로는 스트림보다 컬렉션이 낫다 원소 시퀀스, 즉 일련의 원소를 반환하는 메서드는 수 없이 많았습니다. 자바 8이전까지는 Collection, Set, List와 같은 컬렉션 인터페이스 또는 Iterable이나 배열을 사용했습니다. 하지만 자바 8이후로 Stream이 등장하며 복잡해졌습니다. for-each 문에서만 사용이 되거나 반환된 원소 시퀀스가 일부 Collcetion 메서드를 구현할 수 없는 경우에는 Iterable 인터페이스를 사용하곤 했습니다. 그리고 반환 원소들이 기본 타입이거나 성능에 민감한 상황이라면 배열을 사용했습니다. 💡 반복을 지원하지 않는 Stream Stream과 Stream의 상위 객체인 BaseStream은 모두 Iterable 인터페이스를 구현하거나 상속하지 않습..
스트림에서는 부작용 없는 함수를 사용하라 스트림은 그저 또 하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임입니다. 스트림이 제공하는 표현력, 속도, 병렬성을 얻으려면 API는 말할 것도 없고 이 패러다임까지 함께 받아들여야 합니다. 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 부분입니다. 이때 각 변환 단꼐는 가능한 한 이전 단계의 결과를 받아 처리하는 순수 함수여야 합니다. 순수 함수란 오직 입력만이 결과에 영향을 주는 함수를 말합니다. 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않습니다. 따라서 스트림 연산에 건네는 함수 객체는 모두 부작용(side effect)이 없어야 합니다. 🧨 스트림 패러다임을 이해하지 못한 사용 forEach는 스트림 계산..
스트림은 주의해서 사용하라 스트림 API는 다량의 데이터 처리 작업(순차 또는 병렬)을 돕고자 자바 8에 추가되었습니다. 스트림 API가 제공하는 추상 개념 2가지 스트림은 데이터 원소의 유한 혹은 무한 시퀀스를 의미합니다. 스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념입니다. 스트림 안의 데이터 원소들은 객체 참조나 기본 타입값입니다. 기본 타입 값으로는 int, long, double을 지원하는데 기본 타입의 경우 IntStream, LongStream, DoubleStream과 같은 Stream을 사용하는게 성능상 좋습니다. Stream - 객체 참조에 대한 Stream IntStream - int 타입에 대한 Stream LongStream - long 타입에 대한 Strea..
- Total
- Today
- Yesterday
- spring boot redis 대기열 구현
- pipe and filter architecture
- java userThread와 DaemonThread
- 공간 기반 아키텍처
- spring boot excel download paging
- 자바 백엔드 개발자 추천 도서
- service based architecture
- @ControllerAdvice
- redis 대기열 구현
- redis sorted set으로 대기열 구현
- redis sorted set
- spring boot redisson destributed lock
- spring boot redisson 분산락 구현
- transactional outbox pattern
- JDK Dynamic Proxy와 CGLIB의 차이
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- 람다 표현식
- java ThreadLocal
- spring boot poi excel download
- transactional outbox pattern spring boot
- 서비스 기반 아키텍처
- spring boot excel download oom
- spring boot redisson sorted set
- microkernel architecture
- pipeline architecture
- spring boot 엑셀 다운로드
- 트랜잭셔널 아웃박스 패턴 스프링부트
- 레이어드 아키텍처란
- polling publisher spring boot
- space based architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |