📖

이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 6장에서는 더 복잡한 데이터 처리 질의를 표현할 수 있도록 스트림 API에서 제공하는 기능인 컬렉터를 살펴봅니다. 이 장의 내용 - Collectors 클래스로 컬렉션을 만들고 사용하기 - 하나의 값으로 데이터 스트림 리듀스하기 - 특별한 리듀싱 요약 연산 - 데이터 그룹화와 분할 - 자신만의 커스텀 컬렉션 개발 자바 8의 스트림이란 데이터 집합을 멋지게 처리하는 게으른 반복자라고 생각할 수 있다. 중간 연산 스트림을 다른 스트림으로 변환하는 연산으로서, 여러 연산을 연결할 수 있다. 스트림 파이프라인을 구성하며, 스트림의 요소를 소비하지 않는다. filter 또는 map 최종 연산 스트림의 요소를 소비해서 최종 결과를 도출한다.(예를 들어 스..
이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 5장에서는 스트림으로 복잡한 데이터 처리 질의를 표현하는 방법을 자세히 살펴봅니다. 이 장의 내용 - 필터링, 슬라이싱, 매칭 - 검색, 매칭, 리듀싱 - 특정 범위의 숫자와 같은 숫자 스트림 사용하기 - 다중 소스로부터 스트림 만ㄷ르기 - 무한 스트림 이 장에서는 스트림 API가 지원하는 다양한 연산을 살펴본다. 필터링 스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터랑하는 방법을 배운다. 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 프레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List ve..
이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 4장에서는 스트림의 개념을 설명하며, 스트림과 컬렉션의 비슷한 점과 다른 점을 설명합니다. 이 장의 내용 - 스트림이란 무엇인가? - 컬렉션과 스트림 - 내부 반복과 외부 반복 - 중간 연산과 최종 연산 거의 모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정을 포함한다. 컬렉션으로 데이터를 그룹화하고 처리할 수 있다. 스트림이란 무엇인가? 스트림을 이용하면 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다)으로 컬렉션 데이터를 처리할 수 있다. 일단 스트림이 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하자. 또한 스트림을 이용하면 멀티 스레드 직접 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수..
이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 3장에서는 코드 예제와 퀴즈를 통해 람다 표현식과 메서드 참조를 완벽하게 이해할 수 있습니다. 이 장의 내용 - 람다란 무엇인가? - 어디에, 어떻게 람다를 사용하는가? - 실행 어라운드 패턴 - 함수형 인터페이스, 형식 추론 - 메서드 참조 - 람마 만들기 이 장에서는 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명한다. 또한 자바 8 API에 추가된 중요한 인터페이스와 형식 추론 등의 기능도 확인한다. 마지막으로 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 설명한다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 ..
이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 2장에서는 람다가 탄생한 배경과 자바 8에서 광범위하게 사용된 소프트웨어 개발 패턴인 동작 파라미터화를 설명합니다. 이 장의 내용 - 변화하는 요구사항에 대응 - 동작 파라미터화 - 익명 클래스 - 람다 표현식 미리보기 동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다. 이 코드 블록은 나중에 프로그램에서 호출한다. 동작 파라미터화로 이처럼 다양한 기능을 수행할 수 있다. 리스트에 모든 요소에 대해서 ‘어떤 동작’을 수행할 수 있음 리스트 관련 작업을 끝낸 다음에 ‘어떤 다른 동작’을 수행할 수 있음 에러가 발생하면 ‘정해진 어떤 다른..
이 글은 모던 자바 인 액션라는 책을 읽고 정리한 글입니다. 1장에서는 자바의 주요 변화(람다 표현식, 메서드 참조, 스트림, 디폴트 메서드)가 무엇인지 확인하며, 책 전체의 내용을 설명합니다. 이 장의 내용 - 자바가 거듭 변화하는 이유 - 컴퓨팅 환경의 변화 - 자바에 부여되는 시대적 변화 요구 - 자바 8과 자바 9의 새로운 핵심 기능 소개 역사의 흐름은 무엇인가? 자바 역사를 통틀어 가장 큰 변화가 자바 8에서 일어났다. 멀티코어 CPU 대중화와 같은 하드웨어적인 변화도 자바 8에 영향을 미쳤다. 자바는 이러한 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려고 노력했다. 자바 1.0 : 스레드와 락, 심지어 메모리 모델까지 지원했다. 자바 5 : 스레드 풀, 병렬 실행 컬렉션..
이 글은 오브젝트라는 책을 읽고 정리한 글입니다. 부록 C장에서는 정적인 코드가 동적인 협력을 이끄는 것이 아니라 동적인 협력을 기반으로 정적인 코드를 구현해야 한다는 사실을 설명합니다. 프로그래머가 객체지향 프로그램을 작성하기 위해서는 두 가지 모델을 동시에 마음 속에 그려야한다. 동적 모델(dynamic model) : 프로그램 실행 구조를 표현하는 움직이는 모델 정적 모델(static model) : 코드의 구조를 담는 고정된 모델 객체지향 세계에서 동적 모델은 객체와 협력으로 구성된다. 객체지향 세계에서 정적 모델은 타입과 관계로 구성된다. 타입은 객체를 분류하기 위한 틀로서 동일한 타입에 속하는 객체들이 수행할 수 있는 모든 행동들을 압축해서 표현한 것이다. 정적 모델은 동적 모델에 의해 주도돼..
이 글은 오브젝트라는 책을 읽고 정리한 글입니다. 부록 B장을 읽고 나면 상속이 아닌 다른 방법으로도 타입 계층을 구현할 수 있다는 사실을 알게 될 것입니다. 타입 계층은 동일한 메시지에 대한 행동 호환성을 전제로 하기 때문에 여기서 언급하는 모든 방법은 타입 계층을 구현하는 방법인 동시에 다형성을 구현하는 방법이기도 하다. 여기서 제시하는 방법을 이용해 타입과 타입 계층을 구현한다고 해서 서브타이핑 관계가 보장되는 것은 아니다. 클래스를 이용한 타입 계층 구현 타입은 객체의 퍼블릭 인터페이스를 가리키기 때문에 결과적으로 클래스는객체의 타입과 구현을 동시에 정의하는 것과 같다. 이것이 객체지향 언어에서 클래스를 사용자 정의 타입이라고 부르는 이유다. 클래스는 타입을 구현할 수 있는 다양한 방법 중 하나일..
이 글은 오브젝트라는 책을 읽고 정리한 글입니다. 부록 A장에서는 객체들이 협력을 위해 따라야 하는 약속을 계약의 관점에서 설명합니다. 인터페이스만으로는 객체의 행동에 관한 다양한 관점을 전달하기 어렵다는 것이다. 우리에게 필요한 것은 명령의 부수효과를 쉽고 명확하게 표현할 수 있는 커뮤니케이션 수단이 필요하며, 이때 계약에 의한 설계(Design By Contract, DBC) 가 주는 혜택으로 눈을 돌릴 때가 된 것이다. 협력과 계약 부수효과를 명시적으로 계약에 의한 설계를 사용하면 제약 조건을 명시적으로 표현하고 자동으로 문서화할 수 있을뿐만 아니라 실행을 통해 검증할 수 있다. 계약 계약의 세부적인 내용은 일반적으로 다음과 같은 특성을 가진다. 각 계약 당사자는 계약으로부터 이익(benefit) ..
이 글은 오브젝트라는 책을 읽고 정리한 글입니다. 15장에서는 설계를 재사용하는 디자인 패턴과 설계와 코드를 재사용하는 프레임워크에 관해 살펴봅니다. 디자인 패턴 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 적용할 수 있는 해결 방법이다. 설계를 재사용하기 위한 것이다. 다양한 변경을 다루기 위해 반복적으로 재사용할 수 있는 설계의 묶음이다. 특정한 변경을 일관성 있게 다룰 수 있는 협력 템플릿을 제공한다. 프레임워크 설계와 코드를 재사용하기 위한 것이다. 애플리케이션의 아키텍처를 구현 코드의 형태로 제공한다. 특정한 변경을 일관성 있게 다룰 수 있는 확장 가능한 코드 템플릿을 제공한다. 디자인 패턴과 프레임워크 모두 협력을 일관성 있게 만들기 위한 방법이다. 디자인 패턴과 설계 재사용 소프트웨터..
왕밤빵절미
'📖' 카테고리의 글 목록