본문 바로가기

IT Book Summary

(80)
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 01 스프링, 클라우드와 만나다. 자바와 스프링부트, 스프링 클라우드를 이용해 마이크로 서비스를 구축해보면서, 기존의 모놀리식 monolithic 스프링 애플리케이션을 클라우드에 배포가능한 msa 로 쉽게 마이그레이션 할 수 있겠다. 1.1 마이크로 서비스란? 기존의 모놀리식 애플리케이션의 단점 단일 소프트웨어 방식으로 배포되었고, 이 애플리케이션이 크고 복잡해지게 되면 여러 팀의 의사소통 비용이 증가하고, 각 팀의 변경사항이 있을시 앱 전체를 다시 빌드하고 테스트해서 배포해야 하는 단점이 있다. 마이크로 서비스의 장점 느슨하게 결합된 작은 분산 서비스이며, 관리하기 쉽고 제한된 책임을 담당하는 컴포넌트로 분해할 수 있다. 핵심은 기능을 분해해서 완전히 독립적이어야 한다는 것. MSA 특징 애플리케이션 로직을..
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설계의 어려움 - 도메인 지식을 담는 작업 개발 비용 ..
32장. TDD 마스터 하기 단계가 얼마나 커야하나? ( 각 테스트가 다뤄야 할 범위는 얼마나 넓은가? / 리팩토링 하면서 얼마나 많은 중간단계를 거쳐야 하는가? ) 리팩토링 초기에는 작은 단계로 작업 많은 작은 리팩토링 작업후 몇단계 건너뛰는 시도. 자동화된 리팩토링 IDE 툴 활용. 테스트 할 필요가 없는 것은 무엇인가? '두려움이 지루함으로 변할때까지 테스트를 만들어라' 다음것들을 테스트 해야함. -> 조건문, 반복문, 연산자, 다형성. 내가 작성한 코드에 대해서만 테스트 할것. 불신한 이유가 없다면 다른사람이 만든 코드를 테스트하지마라. -> 다른 코드가 바뀐다면 테스트가 실패할것이기때문 좋은 테스트를 갖췄는지의 여부를 어떻게 알 수 있는가? 설계문제가 있을을 알려주는 테스트 속성. - 긴 셋업코드 - 셋업 중복 - 실행시간..
29장 - 31장 29장 xUnit 패턴 단언(assertion) 테스트가 잘 작동하는지 어떻게 검사할 것인가? -> 불리언 수식을 작성해서 프로그램이 자동으로 코드가 동작하는지에 대한 판단을 수행. 판단 결과가 불리언 값. 참 : 모든테스트 통과 / 거짓 : 예상치 못한 일 발생. 불리언 값은 컴퓨터에 의해 검증. 다양한 형태의 assert() 메서드를 호출하여 얻어냄. 단언은 구체적이어야 한다. 자바기반에서는 단언이 실패할 경우 출력될 정보를 단언에 추가해줄 필요가 있음. 픽스처 여러 테스트에서 공통으로 사용하는 객체들을 생성할때 어떻게 하면 좋을까? -> 각 테스트 코드에 있는 지역변수를 인스턴스 변수로 바꾸고 setUp() 메서드를 재정의하여 이 메서드에서 인스턴스 변수들을 초기화하도록 함. 테스트 코드에서도 중복..
3부 테스트 주도 개발의 패턴. 25장- 28장 25장. 테스트 주도 개발 패턴 테스트 한다는 것은 무엇을 뜻하는가? 테스트를 언제 해야 하는가? 테스트할 로직을 어떻게 고를 것인가? 테스트할 데이터를 어떻게 고를 것인가? 테스트 (명사) 작성한 소프트웨어를 어떻게 테스트할 것인가? - 자동화된 테스트를 만들어라 test : 평가하다. : 승인 또는 거부에 도달하는 과정. '테스트할 시간이 없다' 의 죽음의 나선. positive feedback loop 스트레스를 많이 받으면 테스트를 덜하게됨 - 테스트를 덜하면 에러가 많아짐 \ / 에러가 많아지면 스트레스를 더 받음 어떻게 이 악순환에서 벗어날 수 있을까? -> '테스트'를 '자동화된 테스트'로 치환하면 된다. 자동화된 테스트가 있다면 스트레스를 받기 시작할때 테스트부터 실행할 것이다. 그리고 테..
Chapter 9 리팩터링, 테스팅, 디버깅 이번장에서는 기존 코드를 이용해 새로운 프로젝트를 시작하는 상황을 가정한다. 기존 코드를 람다 표현식을 사용해 어떻게 리팩터링해야 하는지 설명할 것이다. 람다 표현식으로 전략, 템플릿 메서드, 옵저버, 의무체인, 팩토리 등의 객체지향 디자인 패턴을 간소화 시킬지 살펴보자. 9.1 가독성과 유연성을 개선하는 리팩터링 1 - 코드 가독성 개선 코드 가독성이 좋다는것 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있음. 코드의 문서화를 잘하고, 표준 코딩 규칙을 준수하는 등 노력 2 - 익명 클래스를 람다 표현식으로 리팩터링 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩터링 ex) Runnable 객체를 만드는 익명 클래스와 이에 대응하는 람다 표현식 Runnable r1 = new Runn..