본문 바로가기

IT Book Summary

(80)
04 컴포넌트 원칙 -1 SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법이라면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법이다. 12장 컴포넌트 모든 언어에서 컴포넌트는 배포할 수 있는 단위 입자다. 자바의 경우 jar 파일, 루비는 gem 파일, 닷넷은 DLL, 컴파일형 언어는 바이너리 파일의 결합체, 인터프리터형은 소스파일의 결합체, 여러 컴포넌트를 서로 링크해 실행가능한 단일파일로 생성 가능하고, 여러 컴포넌트를 서로 묶어 .war 파일처럼 단일 아카이브로 생성도 가능. 컴포너트 각각을 독립적으로도 배포 가능. 컴포넌트의 역사 프로그래밍 초창기에는 프로그램을 메모리의 어느 위치에 로드할지 프로그래머가 직접 결정해야 했다. 라이브러리 함수 소스코드를 애플리케이션 코드에 직접 포함시켜 단일 프로그램으로 컴파일 했다. 프로그램..
03 설계원칙 -2 10장 ISP: 인터페이스 분리 원칙 The Inteface Segregation Principle 다수의 사용자가 OPS 클래스의 오퍼레이션을 사용. 이런 의존성으로 OPS 클래스에서 op2 소스코드가 변경되면 User1도 다시 컴파일한 후 배포해야함. 오퍼레이션을 인터페이스 단위로 분리하여 해결. ISP와 언어 정적타입 언어의 경우 include 선언문으로 소스코드 의존성이 발생함. 동적타입 언어는 선언문이 존재하지 않고 런타임에 추론이 발생. 따라서 소스코드 의존성이 존재하지 않아 유연하고 결합도가 낮은 시스템을 만들 수 있음. ISP와 아키텍처 필요이상으로 많은걸 포함하는 모듈에 의존하는 것은 해로움. 불필요한 재컴파일과 재배포를 강제하기 때문. 결론 불필요한 짐을 실은 무언가에 의존하면 예상못한..
03 설계원칙 - 1 7장 SRP: 단일 책임 원칙 함수는 반드시 하나의 일만 해야한다는 원칙. 하나의 모듈은 하나의 오직한의 액터에 대해서만 책임져야 한다. 단일 액터를 책임지는 코드를 함께 묶어주는 힘이 응집성 cohesion. 징후 1: 우발적 중복 단일클래스에 세 메서드가 배치되어 세 액터가 서로 결함됨. 변경이 일어날 경우 그것에 의존하는 무언가여 영향을 주게됨. 서로 다른 액터가 의존하는 코드를 너무 가까이 배치해서 발생하는 문제. SRP는 서로 다른 액터가 의존하는 코드를 서로 분리하라고 한다. 징후 2: 병합 병합은 항상 위험이 뒤따른다. 문제를 벗어나는 방법은 서로 다른 액터를 뒷받침하는 코드를 서로 분리하는 것. 해결책 메서드를 각기 다른 클래스로 이동시키는 방식. 아무런 메서드가 없는 간단한 데이터 구조인..
02 벽돌부터 시작하기 : 프로그래밍 패러다임 - 2 4장 구조적 프로그래밍 에츠허르 비버 데이크스트라 - 진공관 시대의 이론물리학자, 최초의 프로그래머 증명 데이크스트라는 증명 Proof 수학적인 원리를 적용하여 프로그래밍의 문제를 해결하려고 했다. --> 유클리드 계층구조를 만드는 것. --> 입증된 구조를 이용하고, 이들 구조를 코드와 결합시켜, 코드가 올바르다는 사실을 스스로 증명하게 되는 방식. --> 순차 sequence, 분기 selection, 반복 iteration 이라는 세가지 구조만으로 표현할수 있다는 사실을 증명. 구조적 프로그래밍의 탄생 모듈을 증명 가능하게 하는 바로 그 제어구조가 모든 프로그램을 만들 수 있는 제어구조의 최소 집합과 동일하다는 사실. 해로운 성명서 데이크스트라가 견해 ""grto문 의 해로움" 이 글에서 세가지 제..
02 벽돌부터 시작하기: 프로그래밍 패러다임 1945년 튜링은 사람이 식별가능한 형태의 실질적 프로그램을 컴퓨터에 코드로 작성했다. 바이너리 언어로 반복문, 분기문, 할당문, 서브루틴, 스택 등 우리에게 익숙한 구조를 사용했다. 어셈블리의 등장, 컴파일러 발명으로 수많은 언어가 탄생했다. 다른 혁신적 변화는 프로그래밍 패러다임의 등장이다. 패러다임은 언어에 독립적인 구조이다. 이런 패러다임에 세가지 종류가 있다. - 구조적, 객체지향, 함수형 프로그래밍. 3장 패더라임 개요 - 구조적 프로그래밍 최초로 적용된 패더라임 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. - 객체지향 프로그래밍 함수가 클래스의 생성자가 되고, 지역변수는 인스턴스 변수 그리고 중첩함수느 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을..
01 Introduction 우리는 어떻게 해야 미래에 어떤 변경을 하게될지 지금 알아내 중요한 결정을 구체적으로 내릴 수 있을까? 어떻게 하면 앞으로 개발에 들어갈 노력과 비용을 줄일 수 있을까? 아키텍처는 종착지가 아니라 여정에 더 가까우며, 고정된 산출물이 아니라 계속된 탐구 과정에 더 가까움을 이해해야 좋은 아키텍처가 만들어진다. 근본적으로 다른 다양한 시스템을 구축하고 경험한 작가가 깨달은 것. --> 아키텍처 규칙은 동일하다. 현재의 소프트웨어는 과거와 동일한 것들로 구성된다. 여전히 if문, 할당문, while 루프로 구성된다. 1950년대와 마찬가지로 코드는 여전히 sequence, selection, iteration의 집합체일 뿐. 언어는 조금 발전했고 도구는 좋아졌지만 프로그래밍을 이루는 기본 구성요소는 바뀌지않..
어댑터 패턴과 퍼사드 패턴 The Adapter and Facade Patterns: Being Adaptive 어댑터 패턴 Adapter Pattern 일반적 어댑터의 역할 : 소켓의 인터페이스를 플러그에서 필요로하는 인터페이스로 바꿔줌. 객체지향 어댑터의 역할 : 어떤 인터페이스를 클라이언트에서 요구하는 형태의 인터페이스에 적응시켜주는 역할. 객체지향 어댑터 어떤 시스템에 새로 제공한 클래스 라이브러리를 사용해야하지만 인터페이스가 다를경우, 어댑터는 클라이언트로부터 요청을 받아 새로운 업체에서 제공한 클래스에서 받아들일수 있는 행태의 요청으로 변환시켜주는 중개인 역할을 한다. 클라이언트에서 어댑터를 사용하는 방법 1. 클라이언트에서 타겟 인터페이스를 사용해 메소드를 호출함으로써 어댑터에 요청을 한다. 2. 어댑터에서는 어댑티 Adaptee 인터페이스를 사용해 그 요청을 어댑티에 대한 (하나 이상의) 메소드 호출..
Command Pattern 커맨드 패턴, 호출 캡슐화 한 차원 높은 단계의 캡슐화 메소드 호출을 캡슐화하면 계산과정의 각 부분들을 결정화 시킬 수 있다. 홈 오토메이션 리모컨 구성 일곱가지 프로그래밍 가능한 슬롯 슬롯마다 on, off 버튼 마지막 누른 버튼에 대한 명령을 취소하기위한 undo 버튼 리모컨에서 제어해야하는 객체의 인터페이스등 커멘드 패턴을 스면 작업을 요청한 쪽과 처리하는 쪽을 분리시킬 수 있다. 커맨드 객체는 특정 객체에 대한 작업요청을 캡슐화시킴. 커맨드 패턴 클라이언트 는 커맨드 객체(리시버에 전달 할 일련의 행동으로 구성)를 생성. creaatCommandObject() 커맨드 객체에는 행동과 리시버 Reciever에 대한 정보가 들어 있음. 커맨드 객체에서 제공하는 메소드는 execute() 하나로 행동을 캡슐화. 리시버의 특정 행..