diff --git "a/\354\240\225\354\206\214\353\257\274/chapter1.md" "b/\354\240\225\354\206\214\353\257\274/chapter1.md"
new file mode 100644
index 0000000..d11d3a2
--- /dev/null
+++ "b/\354\240\225\354\206\214\353\257\274/chapter1.md"
@@ -0,0 +1,67 @@
+# 협력하는 사람들
+
+## 요청과 응답으로 구성된 협력
+
+- 요청과 응답을 통해 다른 사람과 협력함
+- 요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스 제공
+
+## 역할과 책임
+
+- 역할은 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미
+- 사람들이 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행
+ 1. 여러 사람이 동일한 역할 수행 가능
+ 2. 역할은 대체 가능성을 의미
+ 1. 두 명이 동일한 역할은 수행할 수 있다면 요청자 입장에서 둘 중 어떤 사람이 역할을 수행하더라도 문제 없음
+ 3. 책임을 수행하는 방법은 자율적으로 선택 가능
+ 1. 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 **다형성**이라 함
+ 4. 한 사람이 동시에 여러 역할 수행 가능
+
+# 역할, 책임, 협력
+
+## 역할과 책임을 수행하며 협력하는 객체들
+
+- 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것임
+- 객체도 실제 세계와 마찬가지로 자신에게 주어진 역할과 책임을 다하는 동시에 시스템의 더 큰 목적을 이루기 위해 다른 객체와도 적극적으로 협력함
+- 목표(어플리케이션의 기능)는 더 작은 책임으로 분할되고 책임을 수행할 수 있는 적절한 역할을 가진 사람(객체)에 의해 수행됨
+- 객체지향 설계라는 예술은 적절한 객체에게 적절할 책임을 할당하는 것
+- 역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소임
+- 대체 가능한 역할과 책임은 다형성과도 깊이 연관됨
+
+# 협력 속에 사는 객체
+
+- 협력의 품질을 결정하는 것은 객체의 품질임
+- 협력 공동체의 일원으로서 객체는 두 가지 덕목을 갖춰야 함
+ 1. 객체는 충분히 ‘협력적’이어야 함
+ 1. 객체는 다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움을 요청해야 함
+ 2. 객체는 충분히 ‘자율적’이어야 함
+ 1. 객체는 자신의 행동을 스스로 결정하고 책임져야 함
+
+## 상태와 행동을 함께 지닌 자율적인 객체
+
+- 객체는 자율적인 존재로 남기 위해 상태(static)와 행동(behavior)을 함께 지닌 실체라고 정의함
+- 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나옴
+- 객체는 다른 객체가 ‘무엇’을 수행하는지는 알 수 있지만 ‘어떻게’ 수행하는지에 대해서는 알 수 없다.
+
+## 메서드와 자율성
+
+- 객체가 수신된 메시지를 자신만의 방법에 따라 자율적으로 처리하는 방법을 메서드라고 부른다.
+- 외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘임.
+- 이것은 **캡슐화** 개념과도 깊이 관련됨
+
+# 객체지향의 본질
+
+- 객체지향이란 시스템을 **자율적인 객체들의 공동체**로 보고 객체를 이용해 시스템을 분할하는 방법이다.
+- 자율적인 객체란 **상태와 행위**를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다
+- 객체는 시스템의 행위를 구현하기 위해 **다른 객체와 협력**함. 각 객체는 협력 내에서 정해진 **역할**을 수행하며 역할은 관련된 **책임의 집합**이다.
+- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 **메서드를 자율적으로 선택**함
+
+## 객체를 지향하라
+
+- 객체지향의 중심에는 클래스가 아니라 객체가 위치하며 중요한 것은 클래스의 정적인 관계가 아니라 메시지를 주고받는 객체들의 동적인 관계임
+- 클래스의 구조와 메서드가 아니라 객체가 역할과 책임, 협력에 집중하라.
+
+
\ No newline at end of file
diff --git "a/\354\240\225\354\206\214\353\257\274/chapter2.md" "b/\354\240\225\354\206\214\353\257\274/chapter2.md"
new file mode 100644
index 0000000..0c71246
--- /dev/null
+++ "b/\354\240\225\354\206\214\353\257\274/chapter2.md"
@@ -0,0 +1,89 @@
+# 객체, 그리고 이상한 나라
+
+- 객체는 상태를 가지며, 상태는 변경 가능하다.
+- 상태를 결정하는 것은 행동이지만, 행동의 결과를 결정하는 것은 상태다.
+- 행동의 순서가 결과에 영향을 미침
+- 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.
+
+# 객체, 그리고 소프트웨어 나라
+
+## 상태
+
+- 상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있다
+
+### 상태와 프로퍼티
+
+- 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다.
+- 객체의 모든 상태는 단순한 값과 객체의 조합으로 표현할 수 있다.
+- 이때 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티라고 한다.
+- 일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 ‘정적’이다.
+- 반면 프로퍼티 값은 시간이 흐름에 따라 변경되기 때문에 ‘동적’이다.
+- **객체의 프로퍼티는 단순한 값인 속성과 다른 객체를 참조하는 링크의 두 가지 종류의 조합으로 표현할 수 있다.**
+- 행동은 다른 객체로 하여금 간접적으로 객채의 상태를 변경하는 것을 가능하게 함
+- 객체지향의 기본 사상은 상태와 상태를 조작하기 위한 행동을 하나의 단위로 묶는 것임
+- 객체는 스스로의 **행동에 의해서만 상태가 변경되는 것을 보장**함으로써 **객체의 자율성을 유지**함
+
+## 행동
+
+### 상태와 행동
+
+- 객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존한다.
+- 상태와 행동 사이의 관계
+ 1. 객체의 행동은 상태에 영향을 받는다.
+ 2. 객체의 행동은 상태를 변경시킨다.
+- 행동을 두 가지 관점에서 서술
+ 1. 상호작용이 현재의 상태에 어떤 방식으로 의존하는가
+ 2. 상호작용이 어떻게 현재의 상태를 변경시키는가
+
+### 협력과 행동
+
+- 객체의 행동으로 인해 발생하는 결과
+ 1. 객체 자신의 상태 변경
+ 2. 행동 내에서 협력하는 다른 객체에 대한 메세지 전송
+- 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동의 외부에 가시적이어야 함
+
+### 상태 캡슐화
+
+- 객체의 행동을 유발하는 것은 외부로부터 전달된 메시지지만 객체의 상태를 변경할지 여부는 객체 스스로 결정함
+- 객체가 외부에 노출하는 것은 행동뿐이며 외부에서 접근할 수 있는 유일한 방법 역시 행동뿐임
+- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 결과적으로 객체의 자율성을 높이고 협력을 단순하고 유연하게 만듦.
+
+## 식별자
+
+- 식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티임
+- 값은 불변 상태를 가지기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스 비교함
+- 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스 비교함
+
+## 기계로서의 객체
+
+- 객체 기계가 제공하는 버튼을 통해서만 상태에 접근할 수 있다는 점은 객체의 캡슐화를 강조
+- 두 기계는 외부에 동일한 행동을 제공하고 현재 시점에 상태 역시 동일하더라도 두 기계는 구분된 별개의 객체로 인식함
+ - 이는 객체가 상태와 무관하게 구분 가능한 식별자를 가진다는 것
+- 링크를 통해 연결된 두 기계가 메시지 전송을 통해 협력함
+- 객체를 기계로서 바라보는 관점은 상태, 행동, 식별자에 대한 시각적인 이미지를 제공하고 캡슐화와 메시지를 통한 협력 관계를 효과적으로 설명함
+
+## 행동이 상태를 결정한다
+
+- 상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼침
+
+## 은유와 객체
+
+- 객체지향 세계는 현실 세계의 단순한 모방이 아니다.
+
+### 의인화
+
+- 현실 객체와 소프트웨어 객체 사이의 가장 큰 차이는 현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다는 것임
+- 소프트웨어 객체가 현실 객체의 부분적인 특징을 모방하는 것이 아닌 현실 객체가 가지지 못한 추가적인 능력을 보유하게 됨
+- 현실 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징을 **의인화**라고 부름
+- 객체지향 세계은 현실의 추상화가 아니라 현실의 모습을 조금 참조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것임
+
+### 은유
+
+- 현실 세계와 객체지향 세게 사이의 관계를 좀 더 정확하게 설명할 수 있는 단어는 **은유**이다.
+- 현실 속의 객체의 이미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내의 객체는 현실 속의 객체에 대한 은유이다
+- 은유 관계에 있는 실제 객체의 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여 소프트웨어의 구조를 쉽게 예측할 수 있다 → 이해하기 쉽고 유지보수 용이한 소프트웨어 창조 가능
+
+> 객체지향 설계자로서 목적은 현실 모방이 아님.
+객체의 특성을 잘 표현할 수 있도록 현실 속 객체의 이름를 이용해 객체를 묘사하라.
+그렇지 않다면 깔끔하게 현실을 무시하고 자유롭게 우리만의 새로운 세계를 창조하자.
+>
\ No newline at end of file
diff --git "a/\354\240\225\354\206\214\353\257\274/chapter3.md" "b/\354\240\225\354\206\214\353\257\274/chapter3.md"
new file mode 100644
index 0000000..35cb8d7
--- /dev/null
+++ "b/\354\240\225\354\206\214\353\257\274/chapter3.md"
@@ -0,0 +1,153 @@
+# 추상화를 통한 복잡성 극복
+
+
+
+- 객체지향 패러다임은 객체라는 추상화를 통해 현실의 복잡성을 극복함
+
+## 객체지향과 추상화
+
+### 개념
+
+- 앨리스는 정원에 있는 인물들을 트럼프의 그룹과 토끼의 그룹으로 나눔
+- 앨리스는 인물들의 차이점을 의도적으로 무시하고 공통점만을 강조함으로써 ‘트럼프’라는 그룹에 속할 수 있는 인물들을 취사선택함
+- 인물들의 차이점을 무시하고 공통점만을 취해 트럼프라는 개념으로 단순화한 것은 추상화의 일종임
+- 공통점을 기반으로 객체들을 묶기 위한 그릇을 **개념**이라고 한다.
+- 개념을 이용하면 객체를 여러 그룹으로 **분류**할 수 있음
+- 객체란 특정 개념을 적용할 수 있는 구체적인 사물을 의미함
+- 객체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 **인스턴스**라고 한다.
+
+### 개념의 세 가지 관점
+
+- 심볼: 개념을 가리키는 간략한 이름이나 명칭
+
+ (트럼프, 토끼)
+
+- 내연: **개념의 완전한 정의**를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있음
+
+ (몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려있다는 트럼프에 대한 설명)
+
+- 외연: 개념에 속하는 모든 객체의 집합, 개념의 인스턴스들이 모여 이뤄진 집합
+
+ (정원사, 병사, 신하, 왕자와 공주, 하겍으로 참석한 왕과 왕비들, 하트잭, 하트왕과 하트왕비)
+
+- 개념이 심볼, 내연, 외연으로 구성돼 있다는 사실보다는 개념을 이용해 객체를 분류할 수 있다는 사실이 더 중요함
+
+### 객체를 분류하기 위한 틀
+
+- 분류란 객체에 특정한 개념을 적용하는 작업
+- 객체에 어떤 개념을 적용할 것인지를 결정하는 것은 결국 객체들을 개념에 따라 분류하는 것과 동일함
+- **객체를 적절한 개념에 따라 분류**한 애플리케이션은 유지보수가 용이하고 변경에 유연하게 대처 가능
+
+### 분류는 추상화를 위한 도구다
+
+- 정원사, 병사, 신하, 왕자와 공주, 하겍으로 참석한 왕과 왕비들, 하트잭, 하트왕과 하트왕비를 트럼프라는 개념으로 묶은 것은 개별 객체 간의 차이점은 무시하고 공통점은 취한 결과다
+- 따라서 **개념은 추상화의 첫 번째 차원인 일반화를 적용한 결과**다
+- **개념은 객체들의 복잡성을 극복하기 위한 추상화 도구**다
+
+## 타입
+
+### 타입은 개념이다
+
+- 타입은 개념과 동일하다
+- 타입이란 객체에 적용할 수 있는 아이디어나 관념을 의미한다
+- 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다.
+
+### 객체와 타입
+
+- 객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는 것이 객체지향 설계의 핵심이다.
+- 다음 두 가지 조언으로부터 객체지향 설계에 대한 중요한 원칙을 이끌어 낼 수 있음
+ 1. **어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다**
+ 1. 어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류될 수 있다
+ 2. **객체의 내부적인 표현은 외부로부터 철저하게 감춰진다**
+ 1. 객체의 행동을 가장 효과적으로 수행할 수만 있다면 객체 내부의 상태를 어떤 방식으로 표현하더라도 무방하다
+
+### 행동이 우선이다
+
+- **객체의 타입을 결정하는 것은 객체의 행동뿐**이다
+- 동일한 타입에 속한 객체는 내부의 표현 방식이 다르기 때문에 동일한 메시지를 처리하는 방식은 서로 다를 수밖에 없음 → **다형성**
+- 다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력임
+- 다형적인 객체들은 동일한 타입에 속함
+
+---
+
+- 객체의 타입을 결정하는 것은 객체의 행동뿐이므로 외부로부터 데이터를 감춰야 함
+- 훌륭한 객체지향 설계는 외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야 한다 → **캡슐화**
+- 캡슐화는 객체를 행동에 따라 분류하기 위해 지켜야 하는 기본적인 원칙이다.
+
+---
+
+- 객체가 외부에 제공해야 하는 책임을 먼저 결정하고 그 책임을 수행하는 데 적합한 데이터를 나중에 결정한 후, 데이터를 책임을 수행하는 데 필요한 외부 인터페이스 뒤로 캡슐화 해야한다
+- 데이터를 먼저 결정하고 객체의 책임을 결정하는 방법은 유연하지 못한 설계임
+- **책임-주도 설계**라는 객체지향 설계 방법은 데이터-주도 설계 방법의 단점을 개선하기 위해 고안됨
+
+> 객체를 결정하는 것은 행동이다. 데이터는 단지 행동을 따를 뿐이다
+>
+
+## 타입의 계층
+
+- 트럼프는 트럼프 인간을 포괄하는 좀 더 일반적인 개념이다.
+- 트럼프 인간은 트럼프보다 좀 더 특화된 행동을 하는 특수한 개념이다
+- 두 개념 사이의 관계를 일반화/특수화 관계라고 한다
+
+### 일반화/특수화 관계
+
+- 객체지향에서 일반화/특수화 관계를 결정하는 것은 객체의 상태를 표현하는 데이터가 아니라 행동임
+- 일반화/특수화 관계가 성립하려면 한 타입이 다른 타입보다 더 특수하게 행동해야 하고, 반대로 한 타입은 다른 타입보다 더 일반적으로 행동해야 함
+- 특수한 타입은 일반적인 타입이 할 수 있는 모든 행동을 동일하게 수행할 수 있어야 함
+- 일반화/특수화 관계에서 일반적인 타입은 특수한 타입보다 더 적은 수의 행동을 가지지만 더 큰 크기의 외연 집합을 가진다
+
+
+
+### 슈퍼타입과 서브타입
+
+- 일반적인 타입을 슈퍼타입, 특수한 타입을 서브타입이라 함
+- 서브타입은 슈퍼타입의 행위와 호환되기 때문에 서브타입은 슈퍼타입을 대체할 수 있어야 함
+- 서브타입은 슈퍼타입의 행위에 추가적으로 특수한 자신만의 행동을 추가하는 것이므로 슈퍼타입의 행동은 서브타입에게 자동으로 상속된다
+
+
+
+### 일반화는 추상화를 위한 도구다
+
+- 정원에 있던 인물들의 차이점은 무시하고 공통점은 취함으로써 공통의 타입인 트럼프 인간으로 분류함
+- 트럼프 인간을 단순한 관점에서 바라보기 위해 불필요한 특성을 배제하고 더 포괄적인 의미를 지닌 트럼프로 일반화함
+- **일반화/특수화 계층은 객체지향 패러다임에서 추상화의 두 번째 차원을 적절하게 활용하는 대표적인 예**임
+
+## 정적 모델
+
+### 타입의 목적
+
+- 타입을 사용하는 이유는 인간의 인지 능력으로는 시간에 따라 동적으로 변하는 객체의 복잡성을 극복하기가 너무 어렵기 때문
+- 타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 독립적인 정적인 모습으로 다룰 수 있게 해줌
+- 시간이라는 복잡성 제거함
+
+
+
+### 타입은 추상화다
+
+- 타입을 이용하면 객체의 동적인 특성을 추상화할 수 있다
+- 타입은 시간에 따른 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법임
+
+### 동적 모델과 정적 모델
+
+- 객체지향 모델링을 위한 표준 언어인 UML에서 스냅샷은 객체 다이어그램(object diagram)[Fowler 2003]이라고도 불린다. 스냅샷처럼 실제로 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것을 ***동적 모델(***dynamic model)이라고 한다.
+- 다른 하나는 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것이다. 일반적으로 이런 모델을 타입 모델(type diagram)이라고한다.이 모델은 동적으로 변하는 객체의 상태가 아니라 객체가 속한 타입의 정적인 모습을 표현하기 때문에 ***정적 모델***(static mod이)이라고도 한다.
+- 객체지향 애플리케이션을 설계하고 구현하기 위해 객체 관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용해야 한다
+
+### 클래스
+
+- ***객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이라는 사실이 중요하다.***
+- 객체를 분류하기 위해 타입을 결정한 후 프로그래밍 언어를 이용해 타입을 구현할 수 있는 한 가지 방법이 클래스일 뿐인 것이다.
+- **객체지향에서 중요한 것은 동적으로 변하는 객체의 ‘상태’와 상태를 변경하는 ‘행위’**다.
\ No newline at end of file