본문 바로가기

IT Book Summary/ModernJavaInAction

(17)
Chapter 16 CompletableFuture : 안정적 비동기 프로그래밍 병렬을 구현하는 두가지 방식 - 병렬 스트림과 포크/조인 기법을 이용해 컬렉션을 반복 - 분할, 정복 알고리즘을 활용하는 프로그램에서 높은 수준의 병렬을 적용 자바8, 자바9 에서는 CompletableFuture와 리액티브 프로그래밍 패러다임 두가지 API를 제공한다. 자바8에서 제공하는 Future의 구현 CompatableFuture이 비동기 프로그램에 도움을 준다. 16.1 Future의 단순 활용 비동기 계산을 모델링하는데 Future를 이용할 수 있고 Future는 계산이 끝났을때 결과에 접근할 수 있는 참조를 제공한다. 시간이 걸리는 작업을 Future 내부로 설정하면 호출자 스레드가 결과를 기다리는 동안 다른 유용한 작업을 수행할 수 있다. 오래걸리는 작업을 Callable 객체 내부로 감..
Chapter 15 CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 최근 개발방법을 획기적으로 변화하게 만든 두가지 추세가 있다. 하나는 병렬실행 두번째는 마이크로서비스 아키텍처 이다. 멀티코어 프로세서가 발전하면서 애플리케이션 속도는 멀티코어 프로세서를 활용할 수 있도록 소프트웨어를 개발하는가에 따라 달라질 수 있다. 한개의 큰 태스크를 개별 하위태스크로 분리해 병렬로 실행할 수 있고, 포크/조인 프레임워크 나 병렬스트림으로 병렬실행을 달성할 수 있다. 마이크로서비스로 인해 서비스가 작아진 대신 네트워크 통신이 증가했다. 공개 API를 통해 더 많은 인터넷 서비스를 접할수 있게 되었고, 독립적으로 동작하는 웹사이트나 네트워크 애플리케이션을 찾아보기 힘들다. 앞으로는 다양한 소스의 콘텐츠를 가져와 합쳐서 만드는 메시업 mashup 형태의 웹 애플리케이션이 많이 등장할 것..
Chapter 14 자바 모듈 시스템 자바9에서 가장 많이 거론되는 새로운 기능이다. 모듈시스템은 Jigsaw 프로젝트 내부에서 개발된 십년이 걸린 기능. 14.1 압력: 소프트웨어 유추 1 - 관심사 분리 Separation of Concern 은 컴퓨터 프로그램을 고유의 기능으로 나누는 동작을 권장하는 원칙 만약 회계프로그램을 작성한다고 하면, SoC를 적용하여 파싱, 분석, 레포트 기능을 모듈 각각으로 서로 겹치지 않는 코드그룹으로 분리 가능하다. 클래스를 그룹화한 모듈을 이용해 어플리케이션의 클래스간의 관계를 시각적으로 보여줄 수 있다. 개별 기능을 따로 작업할 수 있고 팀이 쉽게 협업한다 개별 부분을 재사용하기 쉽다 전체 시스템을 쉽게 유지보수 할 수 있다. 2 - 정보 은닉 세부구현을 숨기도록 장려하는 원칙 이 원칙이 중요한 이유..
Chapter 13 디폴트 메서드 인터페이스 메서드 추가 해야한다면 그것을 구현하는 모든 클래스도 수정해야 하는데 자바8 에서 새로 추가된 기능이 이 문제를 간단히 해결가능하게 한다. 인터페이스 내부 정적 메서드를 사용하거나 기본구현을 제공할 수 있도록 디폴트 메서드를 사용하는 것이다. 이렇게 하면 기존의 코드 구현을 바꾸도록 강요하지 않고 인터페이스를 바꿀 수 있다. 그렇다면 인터페이스와 추상클래스의 차이가 무엇인가? 디폴트 메서드는 주로 라이브러리 설계자 들이 사용한다. 이것은 다중상속 동작이라는 유연성을 제공하면서 프로그램 구성에 도움을 준다. 정적 메서드와 인터페이스 보통 자바는 인터페이스 그리고 인터페이스의 인스턴스를 활용할 수 있는 다양한 정적메서드를 정의하는 유틸리티 클래스를 활용한다. ex) Collections는 Coll..
Chapter12 새로운 날짜와 시간 API java.util.Date 클래스 문제점 - 특정 시점을 날짜가 아닌 밀리초 단위로 표현한다 - 1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스등 모호한 설계 - toString 으로 반환되는 문자열을 활용하기 어렵다. - JVM 기본시간대 CET 중앙유럽시간대를 사용하므로 자체적 시간대 정보가 없음. - 가변클래스 java.util.Calendar 클래스 문제점 - 달의 인덱스는 0에서 시작 - DateFormat 기능이 없음. - 가변 클래스. - DateFormat은 스레드에 안전하지 않으므로 두 스레드가 동시 하나의 포매터로 날짜 파싱할때 결과가 예기치 못함. 12.1. LocalDate, LocalTime, Instant, Duration, Period 클래스 1 - LocalDa..
Chapter 11 null 대신 Optional 클래스 자바를 포함해 대부분의 언어 설계에는 null 참조개념을 포함한다. 11.1 값이 없는 상황을 어떻게 처리할까? 객체가 객체를 가지고 있는 중첩 구조일 경우 nullPointException 발생한다 1 - 보수적인 자세로 NullPointException 줄이기 필요한 곳에 다양한 null 확인 코드를 추가해 예외 문제를 해결해야 한다 변수를 접근할 때마다 null 체크하면서 들여쓰기 수준이 증가한다 public String getCarInsuranceName (Person person) { if (person != null) { Car car = person.getCar(); if (car != null) { Insurance insurance = car.getInsurance(); if (insur..
10장 람다를 이용한 도메인 전용언어 핵심 비지니스를 모델링하는 영역에서 읽기 쉽고 이해하기 쉬운 코드. 개발팀과 도메인 전문가가 공유하고 이해할 수 있는 코드. -> 도메인 전용 언어 DSL : 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어. 스트림 API의 메서드 체인 의 플루언트 스타일을 DSL에 적용. 10.1 도메인 전용 언어 -> 특정 비지니스 도메인을 인터페이스로 만든 API 1 - DSL의 장점과 단점 장점 간결함 가독성 유지보수 - 자바 코드로 관리하므로 유지보수 쉬움. 높은 수준의 추상화 - 도메인과 같은 추상화 수준에서 동작 집중 - 도메인 규칙을 표현하므로 코드에 집중하기 용이해 생산성이 좋음 관심사 분리 - 독립적으로 비지니스 관련 코드에 집중. 단점 DSL설계의 어려움 - 도메인 지식을 담는 작업 개발 비용 ..
Chapter 9 리팩터링, 테스팅, 디버깅 이번장에서는 기존 코드를 이용해 새로운 프로젝트를 시작하는 상황을 가정한다. 기존 코드를 람다 표현식을 사용해 어떻게 리팩터링해야 하는지 설명할 것이다. 람다 표현식으로 전략, 템플릿 메서드, 옵저버, 의무체인, 팩토리 등의 객체지향 디자인 패턴을 간소화 시킬지 살펴보자. 9.1 가독성과 유연성을 개선하는 리팩터링 1 - 코드 가독성 개선 코드 가독성이 좋다는것 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있음. 코드의 문서화를 잘하고, 표준 코딩 규칙을 준수하는 등 노력 2 - 익명 클래스를 람다 표현식으로 리팩터링 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩터링 ex) Runnable 객체를 만드는 익명 클래스와 이에 대응하는 람다 표현식 Runnable r1 = new Runn..