본문 바로가기

IT Book Summary

(80)
템플릿 메소드 패턴 The Template Method Pattern: Encapsulating Algorithms 커피 및 홍차 클래스 만들기 커피 만드는 것과 홍차 만드는것의 공통부분을 추상화 하자. 동일한 알고리즘 추상화. 물을 끓인다. 뜨거운 물을 이용해 커피 또는 홍차를 우려냄. 만들어진 음료를 컵에 따름. 각 음료에 맞는 첨가물을 추가한다. prepareRecipe() 추상화하기 1. 비슷한 행위를 같은이름으로 통일해서 새로운 메소드를 만듬. // Coffee void prepareRecipe() { boilWater(); brewCoffeeGrinds(); purInCup(); addSugarAndMilk(); } // Tea void prepareRecipe() { boilWater(); steepTeaBag(); purInCup(); addLemon(); } // 메소드 통일 void prepareRe..
Chapter 17 17 냄새와 휴리스틱 Smells and Heuristics 주석 C1: 부적절한 정보 변경이력은 소스를 번잡하게 만듬. 주석은 코드와 설계에 기술적인 설명만. C2: 쓸모없는 주석 오래되서 쓸모없는 주석은 즉시 삭제. C3: 중복된 주석 구구절절 설명하는 중복된 주석 C4: 성의없는 주석 간결하고 명표하게 작성. C5: 주석처리된 코드 소스코드 관리 시스템이 기억하기 때문에 쓸모없는 코드는 주석처리보다 지우자. 환경 E1: 여러단계로 빌드해야 한다. 빌드는 간단히 한 단계로, 한 명령으로 빌드할 수 있어야 한다. E2: 여러단계로 테스트해야 한다 모든 단위 테스트는 한 명령으로 돌려야 함. 함수 F1: 너무 많은 인수 함수의 인수 개수는 작을수록, 아예 없으면 더 좋음. F2: 출력 인수 함수에서 어떤..
Chapter 15, 16 15 JUnit 들여다보기 JUnit 프레임워크 ComparisonCompactor 모듈 두 문자열을 받아 차이를 반환. ABCDE 와 ABCXDE 를 받아 를 반환. ComparisonCompactorTest.java package junit.tests.framework; import junit.framework.ComparisonCompactor; import junit.framework.TestCase; public class ComparisonCompactorTest extends TestCase { public void testMessage() { String failure= new ComparisonCompactor(0, "b", "c").compact("a"); assertTrue("a ex..
Chapter 13, 14 13 동시성 Concurrency 객체는 처리의 추상화다. 스레드는 일정의 추상화다. - 제임스 O.코플리엔 동시성과 깔끔한 코드는 양립하기 매우 어려움. 동시성이 필요한 이유? 동시성은 결합 coupling 을 없애는 전략 : 무엇 what 과 언제 when 을 분리하는 전략. 서블릿 servlet 모델. 서블릿은 웹 호은 EJB 컨테이너 에서 돌아가는데 동시성을 부분적으로 관리함. 웹요청이 들어올때마다 웹서버는 비동기식으로 서블릿을 실행. 동시성이 필요한 상황이 존재. 동시성은 다소 부하를 유발 동시성은 복잡 일반적으로 동시성 버그는 재현하기 어려움 동시성을 구현하려면 흔히 근본적인 설계전략을 재고. 동시성 방어 원칙 단일 책임 원칙 SRP 주어진 메서드/클래스/컴포넌트를 변경할 이유가 하나여야 한다..
Chapter 11, 12 11 시스템 복잡성은 죽음이다. 개발자에게서 ㅅ애기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다. - Ray Ozzie, 마이크로소프트 CTO 도시를 세운다면? 한사람의 힘으로 직적 도시를 관리할 수 없다. 도시는 각 분야를 관리하는 팀이 있고, 적절한 추상화 와 모듈화로 개인과 개인이 관리하는 구성요소는 효율적으로 돌아감. 소프트웨어 팀도 도시처럼 구성함. 시스템 제작과 시스템 사용을 분리하라 제작 construction은 사용 use 와 아주 다르다. 소프트웨어 시스템은 준비과정과 런타임 로직을 분리해야 한다. '관심사 분리'는 오래되고 중요한 설계기법중 하나. 초기화 지연 기법을 한번정도 사용하면 심각하게 문제는 아니지만 여기저기 산재하면 대개 중복이 문제가 됨. 설정논리는 일반 ..
Chapter 09, 10 9장 단위 테스트 애자일과 TDD 로 단위테스트를 자동화 하는 프로그래가 늘어나는 추세. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성. 이 규칙을 따르면 테스트 코드와 실제 코드가 함께 나옴. 하지만 실제 코드를 전부 테스트 하는 방대한 테스트 코드는 관리문제를 유발하기도 함. 깨끗한 테스트 코드 유지하기 일회용 테스트 코드와 자동화된 단위 테스트 슈트는 간극이 매우 큼. 테스트 코드가 지저분할수록 변경하기 어려워지며, 테스트 코드가 복잡하면 유지보수하는 비용도 늘어나게 된다. 테스트 코드는 실제 코드 만큼 중요하다. 테스트 케이스..
06세부사항 -4 34장 빠져있는 장 소프트웨어는 올바르게 정의된 경계, 명확한 책임, 통제된 의존성을 가진 클래스와 컴포넌트로 구성되나 디테일(구현 세부사항)을 고려해야 함. 온라인 서점 예제. 설계나 코드 조직화와 관련된 접근법 계층 기반 패키지 전통적 수평 계층형 아키텍처 - 기술적 관점에서 해당 코드가 하는일에 기반해 코드 분할. 웹, 업무 규칙, 영속성 코드를 위해 수평적 계층이 각각 존재. 자바의 경우 계층은 패키지로 구현. OrdersController: 웹 기반 요청 처리. OrdersService: 주문 업무규칙을 정의하는 인터페이스 OrdersServiceImpl: OrdersService 구현체 OrdersRepository: 주문정보에 접근하는 방법 정의하는 인터페이스 JdbcOrdersReposit..
06 세부사항 - 2 31장 웹은 세부사항이다 끝없이 반복하는 추 연산 능력을 중앙에 집중하는 방식과 분산하는 방식 사이에 끊임없이 움직임. 웸