본문 바로가기

개발 서적/모던 자바 인 액션

[모던 자바 인 액션] chapter 7. 병렬 데이터 처리와 성능 (1) [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) chapter 4. 스트림 소개 chapter 5. 스트림 활용 chapter 6. 스트림으로 데이터 수집(1) chapter 6. 스트림으로 데이터 수집(2) chapter 7. 병렬 데이터 처리와 성능(1) 자바 7이 등장하기 전에는 데이터 컬렉션을 병렬로 처리하기 어려웠음. 다음과 같은 일련의 과정을 거쳐야 했음. 데이터를 서브 파트로 분할 분할된 서브파트를 각각의 스레드로 할당 race condition이 발생하지 않도록 동기화 작업 추가 부분 결과를 합침 자바 7은 더 쉽게 병렬화를 ..
[모던 자바 인 액션] chapter 6. 스트림으로 데이터 수집 (2) [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) chapter 4. 스트림 소개 chapter 5. 스트림 활용 chapter 6. 스트림으로 데이터 수집(1) chapter 6. 스트림으로 데이터 수집(2) 분할 분할 함수(partitioning function)라 불리는 프레디케이트를 분류 함수로 사용하는 특수한 그룹화 기능 분할 함수는 불리언을 반환하므로 맵의 키 형식은 Boolean 그룹화 맵은 최대 (참 or 거짓을 갖기 때문에) 2개의 그룹으로 분류됨. // partitioningBy를 이용해 채식 요리와 채식이 아닌 요리 분리 ..
[모던 자바 인 액션] chapter 6. 스트림으로 데이터 수집 (1) [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) chapter 4. 스트림 소개 chapter 5. 스트림 활용 chapter 6. 스트림으로 데이터 수집(1) 이 장에서는 reduce가 그랬던 것처럼 collect 역시 다양한 요소 누적 방식을 인수로 받아서 스트림을 최종 결과로 도출하는 리듀싱 연산을 수행할 수 있음을 설명한다. 컬렉터란 무엇인가? 함수형 프로그래밍에서는 ‘무엇’을 원하는지 직접 명시할 수 있어서 어떤 방법으로 이를 얻을지는 신경 쓸 필요가 없다. // 통화별로 트랜잭션을 그룹화한 코드 Map transactionsByC..
[모던 자바 인 액션] chapter 5. 스트림 활용 [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) chapter 4. 스트림 소개 chapter 5. 스트림 활용 이 장에서는 스트림 API가 지원하는 다양한 연산을 살펴본다. 다음으로 숫자 스트림, 파일과 배열 등 다양한 소스로 스트림을 만드는 방법과, 무한 스트림 등 스트림의 특수한 경우도 살펴본다. 필터링 스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터링 하는 방법 프레디케이트로 필터링 filterl 메서드는 프레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는..
[모던 자바 인 액션] chapter 4. 스트림 소개 [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) chapter 4. 스트림 소개 SQL 질의 언어에서는 기대하는 필터링을 어떻게 구현해야 할지 명시할 필요가 없으며 구현은 자동으로 제공한다. 컬렉션으로도 이와 비슷한 기능을 만들 수 있지 않을까? 또한, 멀티코어 아키텍처에서 컬렉션을 병렬처리를 통해 성능을 높이는 방법을 쉽게 제공할 수는 없을까? → 이 질문의 답은 스트림이다. 스트림이란 무엇인가? 스트림은 자바 8 API에 새로 추가된 기능이다. 다음과 같은 특징을 갖는다. 선언형 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드..
[모던 자바 인 액션] chapter 3. 람다 표현식(2) [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) (이전 내용 요약) 유연한 구조를 가져가기 위한 전략 : 동적 파라미터화 → 함수형 인터페이스 → 익명 클래스 → 람다 표현식 → 형식 추론 3.6 메서드 참조 메서드 참조는 자바 8 코드의 또 하나의 새로운 기능. 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해준다. 메서드 참조를 이용하면 기존의 메서드 정의를 재활용해서 람다처럼 전달할 수 있다. 람다 표현식보다 더 가독성이 좋으며 자연스러울 수 있다. // 기존의 ..
[모던 자바 인 액션] chapter 3. 람다 표현식(1) [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) 이 장에서는 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명한다. 또한 자바 8 API에 추가된 중요한 인터페이스와 형식 추론 등의 기능도 확인한다. 마지막으로 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 설명한다. 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징은 다음과 같다. 익명 보통의 메서드와 달리 이름이 없다. 구현해야 할 코드에 대한 걱정거리가..
[모던 자바 인 액션] chapter 2. 동작 파라미터화 코드 전달하기 [목차] chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? chapter 2. 동작 파라미터화 코드 전달하기 chapter 3. 람다 표현식(1) chapter 3. 람다 표현식(2) 어떤 상황에서 일을 하든 소비자 요구사항은 항상 바뀐다. 이렇게 시시각각 변하는 사용자 요구 사항에 어떻게 대응해야 할까? 특히 우리의 엔지니어링적인 비용이 가장 최소화될 수 있으면 좋을 것이다. 그뿐 아니라 새로 추가한 기능은 쉽게 구현할 수 있어야 하며 장기적인 관점에서 유지보수가 쉬워야 한다. 동작 파라라미터화(behavior parameterization)을 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다. 동작 파라미터화란 아직은 어떻게 실행할 것이지 결정하지 않은 코드 블..