From 97f4dd183249eab0679ae42c968f65b502b157eb Mon Sep 17 00:00:00 2001 From: DEVdongbaek Date: Tue, 6 Dec 2022 12:50:35 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[=EA=B0=9D=EC=82=AC=EC=98=A4]=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=B9=EA=B1=B4=203=EC=A3=BC=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\352\261\264 3\354\243\274\354\260\250.md" | 224 ++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 "book/3\354\243\274\354\260\250/\354\235\264\354\212\271\352\261\264 3\354\243\274\354\260\250.md" diff --git "a/book/3\354\243\274\354\260\250/\354\235\264\354\212\271\352\261\264 3\354\243\274\354\260\250.md" "b/book/3\354\243\274\354\260\250/\354\235\264\354\212\271\352\261\264 3\354\243\274\354\260\250.md" new file mode 100644 index 0000000..e544916 --- /dev/null +++ "b/book/3\354\243\274\354\260\250/\354\235\264\354\212\271\352\261\264 3\354\243\274\354\260\250.md" @@ -0,0 +1,224 @@ +# 자바꾼 3주차 + +# 🗺6장 객체 지도 + +- 길을 직접 알려주는 방법이 기능적이고 해결 방법 지향적인 접근법이라면 지도를 이용하는 방법은 구조적이고 문제 지향적인 접근법이다. +- 길을 묻는 방법은 현재의 마을에서 다른 마을로 이동하는 현재의 요구만을 만족한다. +- 지도는 현재의 목적뿐만 아니라 다양한 목적을 위해 재사용된다. + - ex) 병원, 학교, 놀이공원을 갈 수 있다. +- 지도 은유의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고, 이해하기 쉬우며 변경에 안정적이라는 것이다. + - 이는 기능을 중심으로 구조를 종속시키는 접근법은 범용적이지 않고 재사용이 불가능하며, 변경에 취약한 모델을 낳게 된다. +- 객체지향은 자주 변경되는 기능이 아니라 안정적인 구조를 기반으로 시스템을 구조화한다. + +### 기능 설계 대 구조 설계 + +- 깔끔하고 단순하며 유지보수하기 쉬운 설계는 사용자의 변하는 요구사항을 반영할 수 있도록 쉽게 확장 가능한 소프트웨어를 창조할 수 있는 기반이 된다. +- 불행하게도 요구사항은 무조건 변경된다. 소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다. +- 설계가 어려운 이유는 어제 약속했던 기능을 제공하는 동시에 내일 변경될지도 모르는 요구사항도 수용할 수 있는 코드를 창조해야 하기 때문이다. +- 우리는 미래를 예측할 수 없다. 단지 대비할 수 있을 뿐이다. +- 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓은 것이다. +- 객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다. 객체지향은 객체의 구조에 집중하고, 기능이 객체의 구조를 따르게 만든다. + +### 두 가지 재료: 기능과 구조 + +- 기능은 사용자가 자신의 목표를 달성하기 위해 사용할 수 있는 시스템의 서비스다. 구조는 시스템의 기능을 구현하기 위한 기반이다. + - 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들간의 관계로 표현한다. + - 기능은 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현한다. +- **유스케이스 모델링** : 기능을 수집하고 표현하기 위한 기법 +- **도메인 모델링** : 구조를 수집하고 표현하기 위한 기법 + +### 안정적인 재료: 구조 + +- **도메인 모델** + - **도메인**은 사용자가 프로그램을 사용하는 대상 분야(이유) + - **도메인 모델**은 소프트웨어 개발과 관련된 이해관계자들이 도메인에 대해 생각하는 관점이다. + - ex) 은행 업무에 종사하는 사람들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름을 이해할 것이다. + - ex) 중고 자동차 판매상은 구매되는 자동차와 판매되는 자동차의 교환으로 자동차 도메인을 바라볼 것이다. + - ex) 게임 플레이어들은 게임 도메인을 캐릭터와 몬스터, 그리고 몬스터가 몬스터가 떨구는 아이템 간의 관계로 파악하다. + - 제품을 설계할 때는 제품에 관한 모든 것이 사용자들이 제품에 대해 가지고 있던 **멘탈 모델(=사람들이 자신이 상호작용하는 사물들에 대해 갖는 모형)**과 정확하게 일치해야 한다고 주장한다. + - ex) 쇼핑몰을 설계 하면 생각하는 고객의 멘탈 모델(=물건 구매, 물건 등록, 물건 조회등등)과 일치해야한다. + - 설계자는 **디자인 모델(=설계자가 마음 속에 갖고 있는 시스템에 대한 개념화)**을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 정확하게 반영하도록 노력해야 한다. + - 도메인 모델은 소프트웨어에 대한 멘탈 모델이다. + +- **도메인의 모습을 담을 수 있는 객체지향** + - 객체지향을 이용하면 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지 모두가 유사한 모습을 유지하도록 만드는 것이 가능합니다. + +- ********표현적 차이******** + - 은유를 통해 현실 객체와 소프트웨어 객체 사이의 차이를 최대한 줄이는 것이다. + - But 안타깝게도 대부분의 소프트웨어 도메인은 현실에 존재하지 않는 가상의 세계를 대상으로 한다. + - ex) 게임 도메인은 현실에는 존재하지 않는 강력한 마법과 괴물들의 천국이다. + + ![KakaoTalk_20221206_011738430.jpg](%E1%84%8C%E1%85%A1%E1%84%87%E1%85%A1%E1%84%81%E1%85%AE%E1%86%AB%203%E1%84%8C%E1%85%AE%E1%84%8E%E1%85%A1%205e024b2d17eb4208866d6113a7b80229/KakaoTalk_20221206_011738430.jpg) + + - 사용자가 도메인에 대해 생각하는 개념들이다. 즉, 소프트웨어 객체를 창조하기 위해 우리가 은유해야 하는 대상은 바로 도메인 모델이다. + +- **불안정한 기능을 담는 안정적인 도메인 모델** + - 도메인 모델이 제공하는 구조는 상대적으로 안정적이다. + - 그 이유는 도메인에 대한 사용자의 관점을 반영해야 하는 이유는 사용자들이 누구보다도 도메인 ‘본질적인’ 측면을 가장 잘 이해하고 있기 때문이다. + - 본질적이라는 것은 변경이 적고, 비교적 그 특성이 오랜 시간 유지된다는 것을 의미한다. + - 도메인 모델은 여러분이 기능을 구현할 때 참조할 수 있는 궁극적인 지도다. + +### 불안정한 재료: 기능 + +- **유스케이스** + - 시스템이 사용자에게 기능을 제공하는 이유는 무엇인가? + - 사용자들이 시스템을 통해 달성하고자 하는 ‘목표’가 존재하기 때문이다. + - ex) 목표 : 쇼핑몰에서 유저가 달성하고자 하는 목표는 물건을 쇼핑하는 것이다. + - 유스케이스의 가치는 사용자들의 목표를 중심으로 시스템의 기능적인 요구사항들을 이야기 형식으로 묶을 수 있다는 점이다. + +- **유스케이스의 특성** + 1. 유스케이스는 사용자와 시스템 간의 상호작용을 보여주는 ‘텍스트’다. + 1. 유스케이스는 다이어그램이 아니다. 중요한 것은 유스케이스 안에 포함돼 있는 상호작용의 흐름이다. + 2. 유스케이스는 하나의 시나리오가 아니라 여러 시나리오들의 집합이다. + 1. 시나리오 = 시스템을 사용하는 하나의 특정한 이야기 또는 경로이다. + 2. ex) 시나리오 = 예금주가 계좌를 선택하고 당일까지의 이자액을 계산하는 것이다. + 3. 유스케이스는 단순한 피처 목록이다. + 1. 피처는 시스템이 수행해야 하는 기능의 목록을 단순하게 나열한 것이다. + 2. 유스케이스의 강점은 유스케이스가 단순히 기능을 나열하는 것이 아니라 이야기를 통해 연관된 기능들을 사용함께 묶을 수 있다는 점이다. + 4. 유스케이스는 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 한다. + 5. 유스케이스는 내부 설계와 관련된 정보를 포함하지 않는다. + +- **유스케이스는 설계 기법도, 객체지향 기법도 아니다.** + - 유스케이스에는 단지 사용자가 시스템을 통해 무엇을 얻을 수 있고, 어떻게 상호작용할 수있느냐에 관한 정보만 기술된다. + - 유스케이스는 단지 기능적 요구사항을 사용자의 목표라는 문맥을 중심으로 묶기 위한 정리 기법일 뿐이다. + +### 재료 합치기: 기능과 구조의 통합 + +- **************도메인 모델, 유스케이스 , 그리고 책임-주도 설계************** + - 변경에 유연한 소프트웨어를 만들기 위해서는 유스케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야한다. + - 시스템은 사용자와 만나는 경계에서 사용자의 목표를 만족시키기 위해 사용자와의 협력에 참여하는 커다란 객체다. + - **객체 설계 순서** + 1. 협력의 출발을 장식하는 첫 번째 메시지는 시스템의 기능을 시스템의 책임으로 바꾸는 것이다. + 2. 시스템의 할당된 커다란 책임을 이제 시스템 안의 작은 규모의 객체들이 수행해야 하는 더 작은 규모의 책임으로 세분화한다. + 3. 우리는 도메인 모델에 포함된 개념을 은유하는 소프트웨어 객체를 선택해야 한다. + 4. 협력을 완성하는 데 필요한 메시지를 식별하면서 객체들에게 책임을 할당해 나간다. + 5. 협력에 참여하는 객체를 구현하기 위해 클래스를 추가하고, 속성과 함께 메서드를 구현하면 시스템의 기능이 완성된 것이다. + - 정리하자면 요구사항들을 식별하고, 도메인 모델을 생성한 후, 소프트웨어를 클래스에 메서드를 추가하고, 요구사항을 충족시키기 위해 객체들 간의 메시지 전송을 정의하라. + - 객체의 이름은 도메인 모델에 포함된 개념으로부터 차용하고, 책임은 도메인 모델에 정의한 개념의 정의에 부합하도록 할당한다. + - 책임 할당의 기본 원칙은 책임을 수행하는 데 필요한 정보를 가진 객체에게 그 책임을 할당하는 것이기 때문이다. + +- **************기능 변경을 흡수하는 안정적인 구조************** + - 도메인 모델이 안정적인 이유 + 1. 도메인 모델을 구성하는 개념은 비즈니스가 없어지거나 완전히 개편되지 않는 한 안정적으로 유지된다. + 2. 도메인 모델을 구성하는 개념 간의 관계는 비즈니스 규칙을 기반으로 하기 때문에 비즈니스 정책이 크게 변경되지 않는 한 안정적으로 유지된다. + - 기능적인 요구사항이 변경될 경우 책임과 객체 간의 대응 관계만 수정될 뿐이다. + - 객체지향의 가장 큰 장점은 도메인을 모델링하기 위한 기법과 도메인을 프로그래밍하기 위해 사용하는 기법이 동일하다는 점이다. + + +# 💑7장 함께 모으기 + +- **개념 관점 :** 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. + - 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다. +- **명세 관점 :** 도메인의 개념이 아니라 실제로 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 맞추게 된다. + - 즉 객체의 인터페이스를 바라보게 된다. +- **구현 관점 :** 구현 관점의 초점은 객체들이 수행하는데 필요한 동작하는 코드를 작성하는 것이다. + +- 위 설명은 개념, 명세, 구현의 순서대로 sw를 개발한다는 의미처럼 들릴 수도 있지만 아니다. 개념, 명세, 구현은 동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미한다. + +### 커피 전문점 도메인 + +- **객체로 세상을 바라보는 절차** + 1. 어떤 객체들이 있고, 구별될 수 있는지 + 2. 객체들의 관계는 어떻게 구성되는지 + 3. 객체의 타입을 어떻게 나눌지 + 4. 타입 간의 관계는 어떻게 되는지 + +### **설계하고, 구현찾기** + +- **설계하기** + 1. 메시지를 먼저 선택한다. + 2. 메시지를 처리할 객체를 찾기 전에 도메인 모델 안에 책임을 수행하기에 적절한 타입이 존재하는지 살펴본다. + 3. 적잘한 타입을 발견했다면 책임을 수행할 객체를 그 타입의 인스턴스로 만든다. + 4. 메시지를 수신한 객체는 메시지를 처리할 책임을 맡게되고, 객체가 수신하는 메시지는 객체가 외부에 제공하는 공용 인터페이스에 포함된다. + + 1. 메시지를 먼저 선택한다. + +![https://user-images.githubusercontent.com/102592414/205712298-92f2e2b5-289e-41fd-8994-849e3bfad732.jpg](https://user-images.githubusercontent.com/102592414/205712298-92f2e2b5-289e-41fd-8994-849e3bfad732.jpg) + +1. 메시지를 수신할 객체는 누구인지, 즉 메시지를 책임질 수 있는 객체를 찾는다. + +![https://user-images.githubusercontent.com/102592414/205713285-47033ff5-7311-4f25-b61f-c85c44753e93.jpg](https://user-images.githubusercontent.com/102592414/205713285-47033ff5-7311-4f25-b61f-c85c44753e93.jpg) + +1. 메시지를 수신받을 때 스스로 할 수 없는 일이 있다면 다른 객체에게 요청을 보낸다. + +![https://user-images.githubusercontent.com/102592414/205713723-b631cfae-6b54-4034-a456-5d039efd0387.jpg](https://user-images.githubusercontent.com/102592414/205713723-b631cfae-6b54-4034-a456-5d039efd0387.jpg) + +1. 또 이러한 메시지를 수신할 객체는 누구인지 찾는일(1~3단계)을 반복한다. + +![https://user-images.githubusercontent.com/102592414/205713905-10879d08-78b3-4d1e-81bb-78b1d79dbf06.jpg](https://user-images.githubusercontent.com/102592414/205713905-10879d08-78b3-4d1e-81bb-78b1d79dbf06.jpg) + + + +### 최종 객체 협력 구조도 + +![https://user-images.githubusercontent.com/102592414/205714033-8a7c711b-b45a-4b8d-9be1-7faa6c94ef28.jpg](https://user-images.githubusercontent.com/102592414/205714033-8a7c711b-b45a-4b8d-9be1-7faa6c94ef28.jpg) + +- **인터페이스(=메서드 선언부) 정리하기** + - 메시지가 객체를 선택했고, 선택된 객체는 메시지를 자신의 인터페이스로 받아들인다. + - 객체가 어떤 메시지를 수신할 수 있다는 것은 그 객체의 인터페이스 안에 메시지에 해당하는 오퍼레이션이 존재한다는 것을 의미한다. + - 각 객체를 협력이라는 문맥에서 때어내어 수신 가능한 메시지만 추려내면 객체의 인터페이스가 된다. + - 객체들을 포괄하는 타입을 정의한 후 식별된 오퍼레이션을 타입의 인터페이스에 추가해야 한다. + - 객체의 타입(=구분하는 기준)을 구현하는 일반적인 방법은 **클래스**를 이용하는 것이다. + - 인터페이스에 포함된 오퍼레이션 역시 외부에서 접근 가능하도록 **Public**으로 선언돼 있어야 한다. + +```java +class Customer { + public void order(String menuName) {} +} + +class MenuItem { + +} + +class Menu { + public MenuItem choose(String name) {} +} + +class Barista { + public Coffee makeCoffee(MenuItem menuItem) {} +} + +class Coffee { + public Coffee(MenuItem menuItem) {} +} +``` + +- **구현하기** + - 위 인터페이스의 코드를 구현해보자 + - 단 구현하는 과정에서 구조도를 반드시 참고해야한다. + + ![https://user-images.githubusercontent.com/102592414/205714033-8a7c711b-b45a-4b8d-9be1-7faa6c94ef28.jpg](https://user-images.githubusercontent.com/102592414/205714033-8a7c711b-b45a-4b8d-9be1-7faa6c94ef28.jpg) + + - Cutomer의 협력을 살펴보면서 구현 프로세스를 익히자. + 1. **Customer**는 **Menu**에게 menuName에 해당하는 **MenuItem**을 찾아달라고 요청해야한다. + 2. **Menu**에게 **MenuItem**을 받아서 이를 **Barista**에게 전달해서 원하는 커피를 제조하도록 요청해야 한다. + - 그러나 이 과정에서 **Customer**가 과연 어떻게 **Menu**객체와 **Barista**객체에 접근할 것인지가 중요하다. + - 객체가 다른 객체에게 메시지를 전송하기 위해서는 먼저 객체에 대한 참조를 얻어야 하는데, 참조를 얻는 여러 다양한 방법들 중 여기서는 **Customer** 의 `order()` 메서드의 인자로 **Menu** 와 **Barista** 객체를 전달받는 방법으로 문제를 해결한다. + + ```java + class Customer { + public void order(String menuName, Menu menu, Barista barista) {} + } + ``` + + - 위 와 같이 참조 문제를 해결하였다면 `order()` 메서드의 구현을 채워야한다. + + ```java + class Customer { + public void order(String menuName, Menu menu, Barista barista) { + MenuItem menuitem menu.choose(menuName); + Coffee coffee = barista.makeCoffee(menuItem); + } + } + ``` + + - 구현하지 않고 머릿속으로만 구상한 설계는 코드로 구현하는 단계에서 대부분 변경된다. 그러니 협력을 구상하는 단계에 너무 오랜 시간을 쏟지말고 최대한 빨리 코드를 구현해서 피드백을 통한 깔끔한 설계를 받아야한다. + + ![https://user-images.githubusercontent.com/102592414/205807783-954132bd-4827-483d-a605-e98c275aa3c8.jpg](https://user-images.githubusercontent.com/102592414/205807783-954132bd-4827-483d-a605-e98c275aa3c8.jpg) + + +### 즉 구현의 순서를 정리하면 + +1. 먼저 구조도를 보고 해당 객체에게 오는 인자를 확인하고, 메서드의 인자로 받는다. +2. 참조 해야하는 객체들 또한 메서드의 인자로 받는다. +3. 구현부에서 해당 객체가 응답해주어야 할 것들을 응답 해준다. \ No newline at end of file From d6d01df1555afa74980070a9f8effcbc0455953b Mon Sep 17 00:00:00 2001 From: yardyard Date: Thu, 9 Feb 2023 18:52:34 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[=EC=98=A4=EB=B8=8C=EC=A0=9D=ED=8A=B8]=201~?= =?UTF-8?q?3=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1\354\243\274\354\260\250.md" | 1 + .../0.jpg" | Bin 0 -> 27718 bytes .../1.jpg" | Bin 0 -> 37500 bytes ...354\262\264, \354\204\244\352\263\204 .md" | 421 +++++++++++++ .../2.jpg" | Bin 0 -> 17583 bytes .../3.jpg" | Bin 0 -> 19700 bytes .../4.jpg" | Bin 0 -> 22339 bytes .../5.jpg" | Bin 0 -> 18966 bytes .../6.jpg" | Bin 0 -> 28541 bytes .../7.jpg" | Bin 0 -> 44630 bytes ...34\352\267\270\353\236\230\353\260\215.md" | 560 ++++++++++++++++++ .../%EC%BA%A1%EC%B2%98.jpg" | Bin 0 -> 16318 bytes .../10.jpg" | Bin 0 -> 10077 bytes .../11.jpg" | Bin 0 -> 11197 bytes .../12.jpg" | Bin 0 -> 23393 bytes .../13.jpg" | Bin 0 -> 20074 bytes .../8.jpg" | Bin 0 -> 59666 bytes .../9.jpg" | Bin 0 -> 8649 bytes ...\354\236\204, \355\230\221\353\240\245.md" | 191 ++++++ d | 47 ++ 20 files changed, 1220 insertions(+) create mode 100644 "book/\352\260\235\354\202\254\354\230\244/1\354\243\274\354\260\250/1\354\243\274\354\260\250.md" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/0.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/1.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 .md" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/2.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/3.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/4.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/5.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/6.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/7.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/%EC%BA%A1%EC%B2%98.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/10.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/11.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/12.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/13.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/8.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/9.jpg" create mode 100644 "book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" create mode 100644 d diff --git "a/book/\352\260\235\354\202\254\354\230\244/1\354\243\274\354\260\250/1\354\243\274\354\260\250.md" "b/book/\352\260\235\354\202\254\354\230\244/1\354\243\274\354\260\250/1\354\243\274\354\260\250.md" new file mode 100644 index 0000000..22f3b82 --- /dev/null +++ "b/book/\352\260\235\354\202\254\354\230\244/1\354\243\274\354\260\250/1\354\243\274\354\260\250.md" @@ -0,0 +1 @@ +# 1주차 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/0.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/0.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..7a93fff11647de4207078a5faa82baa1ee5b3126 GIT binary patch literal 27718 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 OwFKusSl$CUAN@b$S+;Hf literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/1.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 d76f2aa821434cccb673497b1771025c/1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..ecbdd0cbd1b7f74fd955115306d816db45f3cc25 GIT binary patch literal 37500 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 Jd)l9~{}0TV925Wm literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 .md" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 .md" new file mode 100644 index 0000000..0e45904 --- /dev/null +++ "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/1\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_1\354\236\245 \352\260\235\354\262\264, \354\204\244\352\263\204 .md" @@ -0,0 +1,421 @@ +# 1장 : 객체, 설계 + +# ✅이 책의 목표 + +- 코드를 개발하는 사람들이 객체지향 패러다임이라는 용어를 사용할 때 완벽하게는 동일하지 않더라도 어느 정도 유사한 그림을 머릿속에 그릴 수 있는 기반을 제공하기 위해서 +- 객체지향에 대한 다양한 오해를 제거함으로써 객체지향 프로그래밍을 하는 개발자들이 동일한 규칙과 표준에 따라 프로그램을 작성할 수 있게 할 것이다. + +개발자는 코드를 통해 패러다임을 이해하고 적용할 수 있는 기술을 습득해야 한다. + +현실의 패러다임은 천동설과 지동설처럼 두 패러다임이 공존하는게 말이 안되고, 과거의 패러다임을 폐기시키는 혁명적인 과정을 거치지만, 프로그래밍 패러다임은 과거의 패러다임의 단점을 보완하고 발전적인 과정을 거친다. + +- 이런 사실은 객체지향 패러다임을 배우는 것이 다른 패러다임을 배우는 것이 도움이 된다는 것이다. +- 은총알은 없다.(=완벽한 것은 없다.) → 객체지향을 배운다고 해서 모든 프로그래밍을 깨우친게 아니다. + +### 이론이 먼저인가 실무가 먼저인가? + +*부제 : 이론이 먼저인가 코딩이 먼저인가?* + +- 대부분의 사람들은 이론이 먼저 정립된 후에 실무가 그 뒤를 따라 발전한다고 생각하지만, 글래스는 어떤 분야를 막론하고, 이론을 정립할 수 없는 초기에 실무가 먼저 급속한 발전을 이룬다고 한다. +- 소프트웨어 설계와 유지보수에 중점을 두려면 이론이 아닌 실무에 초점을 맞추는 것이 효과적이다. + - 이를 쉽게 말하면 설계나 유지보수에 관해 설명할 때 가장 유용한 도구는 이론으로 덕지덕지 치장된 개념과 용어가 아니라 ‘코드’ 그 자체이다. + - 이론을 아는 개발자가 아닌 그 이론을 코드로 나타낼 수 있는 개발자가 되자! + - 개발자는 구체적인 코드를 만지며 손을 더럽힐 때 가장 많은 것을 얻어가는 존재다. + - 이 책에서는 위의 이유들을 통해서 이 책은 코드 중심으로 객체지향을 설명 할 것이라고 설명하고 있다. + +# ✅티켓 판매 애플리케이션 구현하기 + +소극장을 운영하고 있는 사장이 관람객들의 발길이 이어지도록 작은 이벤트를 기획했다. 이벤트의 내용은 추첨을 통해서 선정된 관람객에게 공연을 무료로 관람할 수 있는 초대장을 발송하는 것이다. + +해당 이벤트를 프로그램으로 구현해보자. + +![0.JPG](1%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6,%20%E1%84%89%E1%85%A5%E1%86%AF%E1%84%80%E1%85%A8%20d76f2aa821434cccb673497b1771025c/0.jpg) + +이 때 염두해야할 점 + +- 이벤트에 당첨된 관람객과 그렇지 못한 관람객은 다른 방식으로 입장시켜야 한다. + - 이벤트에 당첨된 관람객은 초대장으로 티켓을 교환한 후 입장할 수 있다. + - 이벤트에 당첨되지 못한 관람객은 티켓을 구매해야만 입장할 수 있다. +- 즉 관람객을 입장시키기 전 이벤트 당첨 여부를 확인해야하고, 당첨자가 아니면 티켓을 판매 시킨 후 입장시켜야 한다. + +```java +public class Invitaion { + private LocalDateTime when; +} +``` + +- 초대장을 구현한 클래스이다. +- 공연을 관람할 수 있는 초대일자(when)를 인스턴스 변수로 포함하고 있다. + +```java +public class Ticket { + private Long fee; + + public Long getFee() { + return fee; + } +} +``` + +- 티켓을 구현한 클래스이다. + +```java +public class Bag { + private Long amount; + private Invitaion invitaion; + private Ticket ticket; + + // 초대장 보유 여부 + public boolean hasInvitaion() { + return invitaion != null; + } + + // 티켓 보유 여부 + public boolean hasTicket() { + return ticket != null; + } + + // 초대장 -> 티켓 + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } + + public void minusAmount(Long amount) { + this.amount -= amount; + } + + public void plusAmount(Long amount) { + this.amount += amount; + } + + public Bag(long amount) { + this(null, amount); // this를 통해 해당 객체 생성자에 바로 접근 + } + + public Bag(Invitaion invitaion, long amount) { + this.invitaion = invitaion; + this.amount = amount; + } +} +``` + +- 관람객이 가지고 올수있는 소지품들(초대장, 현금, 티켓)을 보관할 수 있는 가방 클래스이다. +- 초대장 보유 여부, 티켓 소유 여부, 현금 증가, 감소, 초대장을 티켓으로 변환시켜주는 메서드들이 있다. +- Bag 인스턴스 상태는 현금과 초대장을 함께 가지고 있거나, 현금만 가지고 있는 상태이기에 Bag 객체 생성 시점에 제약을 강제한다. + +```java +public class Audience { + private Bag bag; + + public Audience(Bag bag) { + this.bag = bag; + } + + public Bag getBag() { + return bag; + } +} +``` + +- 관람객을 구현한 클래스이다. +- 관람객은 소지품을 보관하기 위해 가방을 소지할 수 있다. + +```java +public class ticketOffice { + private Long amount; + private List tickets = new ArrayList<>(); + + // 인스턴스 생성시 판매하거나, 교환해줄 Ticket들과 갯수를 받는다. + public ticketOffice(Long amount, Ticket ... tickets) { + this.amount = amount; + this.tickets.addAll(Arrays.asList(tickets)); + } + + public Ticket getTicket() { + return tickets.remove(0); + } + + public void plusAmount(Long amount) { + this.amount += amount; + } +} + +``` + +- 매표소를 구현한 클래스이다. +- 매표소에는 관람객에게 판매할 티켓과 티켓의 판매 금액이 보관 되어있어야 한다. + +```java +public class TicketSeller { + private TicketOffice ticketOffice; + + public TicketSeller(TicketOffice ticketOffice) { + this.ticketOffice = ticketOffice; + } + + public TicketOffice getTicketOffice() { + return ticketOffice; + } +} +``` + +- 판매원을 구현한 클래스이다. +- 판매원은 자신이 일하는 매표소를 알고있어야 한다. + +```java +public class Theather { + private TicketSeller ticketSeller; + + public Theather(TicketSeller ticketSeller) { + this.ticketSeller = ticketSeller; + } + + public void enter(Audience audience) { + // 초대장이 있다면 flow + if (audience.getBag().hasInvitaion()) { + Ticket ticket = ticketSeller.getTicketOffice().getTicket(); + audience.getBag().setTicket(ticket); + } + // 초대장이 없다면 flow + else { + Ticket ticket = ticketSeller.getTicketOffice().getTicket(); + audience.getBag().minusAmount(ticket.getFee()); + audience.getBag().setTicket(ticket); + } + } +} +``` + +- 소극장을 구현한 클래스이다. +- 초대장 유무에 따라서 flow가 나뉘어진다. +- 위 코드들은 정상적으로 동작한다. + - 그러나 당연하게도 직접적인 값(티켓 수, 일자, 요금등)들을 넣어주지 않았기에 동작만 한다. + +# ✅위 코드들은 과연 무엇이 문제인가? + +- 로버트 마틴은 SW 모듈이 가져야 하는 세 가지 기능에 관해 설명했다. + 1. 실행 중에 제대로 동작하는 것 + 2. 변경을 위해 존재하는 것 → 간단한 작업만으로도 변경이 가능해야한다. + 3. 코드를 읽는 사람과 의사소통하는 것 → 쉽게 읽고 이해할 수 있어야한다. + +- 위 코드는 1번은 충족했지만, 2, 3번은 충족하지 못했다. + +### 예상을 빗나가는 코드 + +- 일반적으로는 관람객이 스스로 초대장을 꺼내는 것이 맞는 것이다. 그러나 현재는 관람객은 소극장의 통제를 받는 수동적인 존재이다. + - Audience 객체에서 초대장을 꺼내는 것이 아니라, Theater 객체에서 Audience 객체가 초대장이 있는지 확인한다. +- 일반적으로 판매원이 티켓을 판매하고, 돈을 관리해야 하나 현재는 소극장이 모든 티켓을 판매하고, 돈을 관리한다. + - TicketSeller 객체에서 티켓을 판매하고, 돈을 관리하는 것이 아니라, Theather 객체에서 해당 책임들을 소화한다. + +즉 각 책임들이 올바른 객체들에 할당되지 못했다. + +- 이해 가능한 코드란 그 동작이 우리의 예상에서 크게 벗어나지 않는 코드이다. + - 우리의 예상은 관람객이 직접 자신의 가방에서 초대장을 꺼내 판매원에게 건내고, 티켓을 구매하는 관람객은 가방 안에서 돈을 직접 꺼내서 판매원에게 지불하는 것이다. 판매원은 매표소에 있는 티켓을 직접 꺼내 관람객에게 건네고 관람객에게서 직접 돈을 받아 매표소에 보관해야한다. + +- 코드를 이해하기 어려운 또 다른 이유로는 한 메서드의 코드를 이해하기 위해서는 여러 세부적인 내용들을 한꺼번에 기억하고 있어야 한다는 점이다. + - Theater 객체의 enter 메서드를 이해하기 위해서는 Audience가 Bag을 가지고 있고, Bag 안에는 현금과 티켓이 들어있는 점들을 알고있어야한다. + +🤓 : 내 PostService의 save() 메서드와 비슷하지 않은가… + +### 변경에 취약한 코드 + +- 너무 많은 객체들이 Bag 객체에 의존하고 있기에, Bag 객체를 변서 +- 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것이다. + - 우리의 목표는 애플리케이션의 기능을 구현하는 데 필요한 최소한의 의존성만 유지하고 불필요한 의존성을 제거하는 것이다. + +![1.JPG](1%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6,%20%E1%84%89%E1%85%A5%E1%86%AF%E1%84%80%E1%85%A8%20d76f2aa821434cccb673497b1771025c/1.jpg) + +🤓 : 내 PostService도 이런데 ㅋㅋㅋㅋ ㅠㅠㅠㅠ + +# ✅설계 개선하기 + +- 어떻게 개선할 수 있는가?? + - 올바른 책임을 올바른 객체에게 부여하여서, 관람객과 판매원을 **자율적인 존재**로 만들자 + + +### 자율성을 높이자 + +- 설계를 변경하기 어려운 이유는 Theater가 너무 많은 클래스에 의존하고 있기 때문이다. + - 이의 해결 방법은 Theater가 기존에 Bag과 TicketOffice를 접근하는 책임을 Audience와 TicketSeller가 직접 Bag과 TicketOffice를 처리하는 **자율적인 존재**가 되도록 설계를 변경하는 것이다. + - 🤓 : 그러면 PostService의 save() 또한 postMap과 Map을 직접 save 하는 것이 아니라 각 postMap과 Map에게 각자 save를 하는 책임을 부여해야하구나!! + - 🤓 : 그러면 PostMapService와 MapService에서 save() 메서드를 따로 만들었어야 할까? + +- Theater 객체에서 TicketOffice에 접근하던 책임을 TicketSeller에게 책임을 넘겨주자. + +```java +public class Theather { + private TicketSeller ticketSeller; + + public Theather(TicketSeller ticketSeller) { + this.ticketSeller = ticketSeller; + } + + public void enter(Audience audience) { + ticketSeller.sellTo(audience); + } +} +``` + +```java +public class TicketSeller { + private TicketOffice ticketOffice; + + public TicketSeller(TicketOffice ticketOffice) { + this.ticketOffice = ticketOffice; + } + +// public TicketOffice getTicketOffice() { +// return ticketOffice; +// } + + public void sellTo(Audience audience) { + // 초대장이 있다면 flow + if (audience.getBag().hasInvitaion()) { + Ticket ticket = ticketOffice.getTicket(); + audience.getBag().setTicket(ticket); + } + // 초대장이 없다면 flow + else { + Ticket ticket = ticketOffice.getTicket(); + audience.getBag().minusAmount(ticket.getFee()); + ticketOffice.plusAmount(ticket.getFee()); + audience.getBag().setTicket(ticket); + } + } +} +``` + +- Theater에서 더 이상 TicketOffice에서 접근하지 못하도록 `getTicketOffice()` 를 제거해줬다. + - 따라서 TicketSeller는 ticketOffice에 대한 접근은 오직 TicketSeller 안에만 존재하기에, TicketSeller는 ticketOffice에서 티켓을 꺼내거나 판매 요금을 적립하는 일을 스스로 수행할 수 밖에 없다. +- 이렇게 개념적으로나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 **캡슐화**라고 부른다. + - 🤓 : PostService의 `save()`에서는 너무 많은 사항들이 나와있구나…! 각 엔티티 save 과정, s3upload 과정들을 더 캡슐화 할 필요가 있겠다. → 각 객체들에게 책임을 분담하고, `save()`에서는 인터페이스에만 의존할 수 있도록(=호출하기만 할 수 있도록) + +- Theater는 오직 TicketSeller의 인터페이스에만 의존한다.(=`ticketSeller.sellTo(audience);`) TicketSeller가 내부에 TicketOffice 객체를 포함하고 있다는 사실은 구현의 영역이다. + - 객체를 인터페이스와 구현으로 나누고, 인터페이스만을 공개하는 것은 객체 사이의 결합도를 낮추고 변경하기 쉬운 코드를 작성하기 위해 따라야 하는 가장 기본적인 설계 원칙이다. + - 🤓 : 이 말은 올바른 객체에게 올바른 책임을 주고, 그 객체를 사용하는 객체에서는 호출해서 사용하기만 하면 되도록 하라는 말인 듯 + +- 그러나 아직도 Audience는 Bag에서 스스로 돈을 꺼내서 티켓을 구매하는 것이 아니라 TicketSeller가 대신 돈을 꺼내서 티켓을 구매하고 있다. + +```java +public class TicketSeller { + private TicketOffice ticketOffice; + + public TicketSeller(TicketOffice ticketOffice) { + this.ticketOffice = ticketOffice; + } + +// public TicketOffice getTicketOffice() { +// return ticketOffice; +// } + + public void sellTo(Audience audience) { + ticketOffice.plusAmount(audience.buy(ticketOffice.getTicket())); + } +} +``` + +```java +public class Audience { + private Bag bag; + + public Audience(Bag bag) { + this.bag = bag; + } + +// public Bag getBag() { +// return bag; +// } + + public Long buy(Ticket ticket) { + // 초대장이 있다면 flow + if (bag.hasInvitaion()) { + bag.setTicket(ticket); + return 0L; + } + // 초대장이 없다면 flow + else { + bag.setTicket(ticket); + bag.minusAmount(ticket.getFee()); + return ticket.getFee(); + } + } +} +``` + +### 무엇이 개선됐는가? + +- 우리의 예상과 이제 일치하기에, 코드를 읽는 사람과의 의사소통이라는 관점에서 이 코드는 확실히 개선된 것으로 보인다. +- 또한 Audience나 TicketSeller의 내부 구현을 변경해도 Theater를 함께 변경할 필요가 없어졌다는 것이다. → Theater에서는 Audience나 TicketSeller의 인터페이스만 사용하기에 + +### 어떻게 한 것인가 + +- 객체의 자율성을 높이는 방향으로 설계를 개선했다. + - TicketSeller가 티켓을 판매하기 위해서 TicketOffice를 사용하는 모든 부분을 TicketSeller 내부로 옮기고, 관람객이 스스로 가방에서 돈, 초대장을 꺼내 티켓을 구매하기 위해 Bag을 사용하는 모든 부분을 Audience 내부로 옮겼다. + - 자기 자신의 문제를 스스로 해결하도록 코드를 변경한 것이다. + - 🤓 : PostMap 일은 PostMap이~, Map 일은 Map이~ + - 자기 자신의 일을 다른 누군가가 마음대로 접근해서 대신 해결하지 않도록 해야한다. → **캡슐화** + - 🤓 : PostMap 일을 Post가 해결하지 못하도록 PostMap 내부에 `save()` 메서드를 구현하고 외부에서 PostMap 엔티티 자체에 접근하지 못하게 만들고, Post에서는 `save()` 인터페이스만 이용하도록하자. + +### 캡슐화와 응집도 + +- 위의 말들을 요약하면 다음과 같다. + + + +- 객체의 응집도를 높이기 위해서는 객체 스스로 자신의 데이터를 책임져야 한다. +- 객체 지향 애플리케이션은 스스로 책임을 수행하는 자율적인 객체들의 공동체를 구성함으로써 완성된다. + - 🤓 : 저번에 수민님께서 인터페이스를 사용하여서 `save()` 하라고 말씀하셨던 부분이 이해가 되었다!! 인터페이스를 사용하면 기존과 똑같이 의존하는 것이 아니라 결합도를 낮추고, 변경을 쉽게 할 수 있도록 하는 것이구나!! + +### 절차지향과 객체지향 + +- 변경하기 쉬운 설계는 한 번의 변경에 하나의 클래스만 변경할 수 있는 설계다. + - 🤓 : PostMap 엔티티에 새로운 멤버 변수를 추가해야한다면 나는 PostService의 `save()` 까지 변경해야 했구나 +- 훌륭한 객체지향 설계의 핵심은 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것이다. + +1. 어떤 기능을 설계하는 방법은 한가지 이상일 수 있다. +2. 동일한 기능을 한 가지 이상의 방법으로 설계할 수 있기 때문에 결국 설계는 트레이드오프의 산물이다. + 1. 🤓 : 이번 프로젝트간 게시글과 사진을 보내는 방법이 여러개였던 것 처럼 + +### 더 개선할 수 있다. + +- Bag은 과거 Audience처럼 스스로 자기 자신을 책임지지 않고, 끌려다니는 수동적인 존재다. + - Bag의 내부 상태에 접근하는 모든 로직을 Bag 안으로 캡슐화해서 결합도를 낮추면 된다. + - 🤓 : 오 리팩토링할 때 해당 엔티티에 접근하는 로직들을 해당 엔티티 안으로 캡슐화 하면 되겠구나!! + +- 그런데 Bag은 현실에서는 자율적인 존재가 아닌데, 스스로 책임을 지게 해도 괜찮은가? + - 현실에서는 수동적인 존재라고 하더라도 객체 지향 세계에서는 모든 것이 능동적이고 자율적인 존재로 바뀐다. → **의인화** + +- 이해하기 쉽고 변경하기 쉬운 코드를 작성하고 싶다면 한 편의 애니메이션을 만든다고 생각하자. 다른 사람의 코드를 읽고 이해하는 동안에는 애니메이션을 보고 있다고 생각하자 그리고 각 객체들을 의인화 시켜보자. 그렇게 하면 안에서 각 캐릭터(=객체)들이 웃고, 떠들고, 화내는 여러 객체를 만나더라도 당황하지 않을 것이다. + - 🤓 : 그렇지 애니메이션에서는 가방이 웃고 떠들수 있는 자율적인 객체가 될 수 있으니! + +# ✅1강 정리 + + + + + + + +- 설계는 코드를 작성하는 것보다 높은 차원의 창조적인 행위가 아니다. +- 설계는 코드를 작성하는 순간 매 순간 코드를 어떻게 배치할 것인지를 결정하는 과정에서 나온다. + + + +- 데이터와 프로세스를 하나의 덩어리로 모으는 것은 훌륭한 객체지향 설계로 가는 첫걸음 → 이는 객체 스스로 자신의 데이터를 책임져야 한다. 는 말과 같다. \ No newline at end of file diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/2.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/2.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..9a3a3bbe2435bcf690e8f77480699399438cbd3d GIT binary patch literal 17583 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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/3.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215 d315814bc8c848eb938acc725d511ff2/3.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..92cdd11f279dc740349854c9aaa8feb580dad725 GIT binary patch literal 19700 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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" new file mode 100644 index 0000000..632e145 --- /dev/null +++ "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/2\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_2\354\236\245 \352\260\235\354\262\264\354\247\200\355\226\245 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" @@ -0,0 +1,560 @@ +# 2장 : 객체지향 프로그래밍 + +# ✅영화 예매 시스템 + +### 영화 예매 시스템 요구사항들 + +- 사용자는 영화 예매 시스템을 이용해 쉽고 빠르게 보고 싶은 영화를 예매할 수 있다. + - 영화 → 영화에 대한 기본 정보 + - 상영 → 실제로 관객들이 영화를 관람하는 사건(상영 일자, 시간, 순번) +- 특정한 조건을 만족하는 예매자는 요금을 할인받을 수 있다. 단 영화별로 하나의 할인 정책만 할당할 수 있다. 그러나 할인 조건은 다수의 할인 조건을 함께 지정할 수 있다. + - 할인 조건 → 가격의 할인 여부 결정 + - 순서 조건 : 상영 순번을 이용해 할인 여부 결정 + - 기간 조건 : 영화 시작 시간이 해당 기간 안에 포함될 경우 요금을 할인 + - 할인 정책 → 할인 요금을 결정 + - 금액 할인 정책 : 예매 요금에서 일정 금액을 할인 + - 비율 할인 정책 : 정가에서 일정 비율의 요금을 할인 +- 할인을 적용하기 위해서 할인 조건과 할인 정책을 함께 조합해서 사용한다. + - 먼저 사용자의 예매 정보가 할인 조건 중 하나라도 만족하는지 검사하고, 만족할 경우 할인 정책을 이용해 할인 요금을 계산한다. + - 할인 정책은 적용되었으나 할인 조건을 만족못하면 요금을 할인하지 않는다. + +![2.JPG](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/2.jpg) + +# ✅객체지향 프로그래밍을 향해 + +### 협력, 객체, 클래스 + +- 객체지향은 객체를 지향하는 것이다. + - 혹시 객체지향 프로그램을 작성할 때 가장 먼저 고려하는 것이 어떤 클래스가 필요할지 고민하지는 않는가? 이는 객체지향의 본질과는 거리가 멀다. 객체지향은 말 그대로 객체를 지향하는 것이다. + +1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라. + 1. 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지 먼저 결정해야 한다. + 2. 🤓 : 어떤 객체들이 필요한지 정확히 어떻게 생각하지?? → 3장 참고 +2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. + + + +### 도메인의 구조를 따르는 프로그램 구조 + +- 🤓 : 어떤 객체들이 필요한지 정확히 어떻게 생각하지??에 대한 답이 여기 나온다. + - 요구사항을 분석하는 단계부터 프로그램을 구현하는 마지막 단계까지 도메인의 개념들을 프로그램의 객체라는 개념과 동일하게 볼 수 있다. 즉 어떤 객체들이 필요한지를 어떤 도메인들이 있는지로 연결하면 된다. + - 요구사항과 프로그램을 객체라는 동일한 관점에서 바라볼 수 있기 때문에 도메인을 구성하는 개념들이 프로그램의 객체와 클래스로 매끄럽게 연결될 수 있다. + + + +- 일반적으로 클래스의 이름은 대응되는 도메인 개념의 이름과 동일하거나 적어도 유사하게 지어야한다. 클래스 사이의 관계 또한 최대한 도메인 개념 사이에 맺어진 관계와 유사하게 만들어서 프로그램의 구조를 이해하고 예상하기 쉽게 만들어야 한다. + +![3.JPG](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/3.jpg) + +![4.JPG](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/4.jpg) + +### 클래스 구현하기 + +- 위에서 도메인 개념들의 구조를 반영하여서 적절한 클래스 구조를 만들었다면 이제 적절한 프로그래밍 언어를 이용해 이 구조를 구현하는 것이다. + +```java +public class Screening { + private Movie movie; + private int sequence; + private LocalDateTime whenScreened; + + public Screening(Movie movie, int sequence, LocalDateTime whenScreened) { + this.movie = movie; + this.sequence = sequence; + this.whenScreened = whenScreened; + } + + public LocalDateTime getStartTime() { + return whenScreened; + } + + public boolean isSequence(int sequence) { + return this.sequence == sequence; + } + + public Money getMovieFee() { + return movie.getFee(); + } +} +``` + +- 사용자들이 예매하는 대상인 ‘상영’을 구현 +- 영화, 순번, 상영 시작 시간을 인스턴스 변수로 포함 +- 중요한 점은 인스턴스 변수의 가시성은 private이고, 메서드의 가시성은 public이라는 것이다. + - 클래스를 구현할 때 가장 중요한 것은 클래스의 경계를 구분 짓는 것이다. + +### 자율적인 객체 + +- 객체에게 원하는 것을 요청하고는 객체가 스스로 최선의 방법을 결정할 수 있을 것이라는 점을 믿고 기다려야 한다. + + + +인터페이스와 구현의 분리 + +- 퍼블릭 인터페이스 → 외부에서 접근 가능한 부분 ex) public +- 구현 → 외부에서 접근 불가능하고, 오직 내부에서만 접근 가능한 부분으로 구현 ex) private, protected + +### 프로그래머의 자유 + +- 프로그래머의 역할을 **클래스 작성자**와 **클라이언트 프로그래머**로 구분하자. + - **클래스 작성자 →** 새로운 데이터 타입을 프로그램에 추가한다. + - 클라이언트 프로그래머에게 필요한 부분만 공개하고, 나머지는 꽁꽁 숨겨야 한다. + - **구현 은닉** : 그래야 외부 접근으로 인한 코드 변경을 걱정하지 않고, 내부 구현을 마음대로 변경할 수있다. + + - **클라이언트 프로그래머** → 필요한 클래스들을 엮어서 애플리케이션을 빠르고 안정적으로 구축하는 것 + + +### 협력하는 객체들의 공동체 + +```java +public Reservation reserve(Customer customer, int audienceCount) { + return new Reservation(customer, this, calculateFee(audienceCount), audienceCount); +} +``` + +- Screening 클래스 내의 예매하는 기능을 구현한 메서드이다. + +```java +public Money calculateFee(int audienceCount) { + return movie.calcurateMovieFee(this).times(audienceCount); +} +``` + +- Screening 클래스 내의 요금을 계산해서 Reservation 객체를 만드는데 사용하는 메서드 + +```java +public class Money { + // final은 값이 바뀌지 않고, static은 메모리 주소가 딱 한번 할당된다. + // 어차피 값 안바뀔꺼, 메모리 주소를 할당하는게 낫지 않겠나? -> 같이 쓰이는 이유 + public static final MoneyZERO= Money.wons(0); + + // BigDecimal은 돈과 소수점을 다룬다면 필수로 선택해야할 자료형 + private final BigDecimal amount; + + public static Money wons(long amount) { + return new Money(BigDecimal.valueOf(amount)); + } + + public static Money wons(double amount) { + return new Money(BigDecimal.valueOf(amount)); + } + + Money(BigDecimal amount) { + this.amount = amount; + } + + public Money plus(Money amount) { + // BigDecimal 타입의 사칙 연산은 메서드를 이용해야 한다. + // 입력으로 받은 돈을 현재 돈에 더해준다. + return new Money(this.amount.add(amount.amount)); + } + + public Money minus(Money amount) { + return new Money(this.amount.subtract(amount.amount)); + } + + public Money times(double percent) { + return new Money(this.amount.multiply( + BigDecimal.valueOf(percent))); + } + + public boolean isLessThan(Money other) { + return amount.compareTo(other.amount) < 0; + } + + public boolean isGreaterThanOrEqual(Money other) { + return amount.compareTo(other.amount) >= 0; + } +} +``` + +- 금액과 관련된 다양한 계산을 구현하는 간단한 클래스이다. + +- 1장에서는 금액을 구현하기 위해 Long 타입을 사용했지만, 위 코드에서는 Money 객체 타입을 사용한 이유 + - Long 타입은 Money 타입처럼 저장하는 값이 금액과 관련돼 있다는 의미를 전달할 수 없고,금액과 관련된 로직이 서로 다른 곳에 중복되어 구현되는 것을 막을 수 없다. + - 🤓 : 프로젝트간 Date 클래스를 만들어서 Date 타입을 만들지 않았다면 모든 엔티티에 Date 로직을 넣어줬어야 할 거야 ㅎㄷㄷ… + + + +```java +public class Reservation { + private Customer customer; + private Screening screening; + private Money fee; + private int audienceCount; + + public Reservation(Customer customer, Screening screening, Money fee, int audienceCount) { + this.customer = customer; + this.screening = screening; + this.fee = fee; + this.audienceCount = audienceCount; + } +} +``` + +- 영화를 예매하기 위한 클래스이다 +- 고객, 상영정보, 예매 요금, 인원수가 속성으로 포함된다. + +![5.JPG](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/5.jpg) + +- 위의 흐름은 다음과 같다. + 1. Screening `reserve()`에서 인자로 Customer, count를 받는다. + 2. `reserve()`에서 Reservation 객체를 생성해주기 위해, Screening 내의 요금을 계산하는 `calcurateFee()`를 호출한다. `calcurateFee()` 는 Money의 `calculateMovieFee()` 를 호출한다. + 3. Money의 `calculateMovieFee()` 는 1인당 예매 요금을 반환해준다. + 4. `calcurateFee()` 는 `calculateMovieFee()` 로부터 반환받은 1인당 예매 요금에 인원수를 곱해서 최종 요금을 Reservation 생성자에 넘겨준다. + +- 영화를 예매하기 위해서 Screening, Moview, Reservation 인스턴스들은 서로의 메서드를 호출하며 상호작용한다. + - 이처럼 시스템의 어떤 기능을 구현하기 위해 객체들 사이에 이뤄지는 상호작용을 **협력**이라고 부른다. + - 🤓 : 아니 그러면 의존성이 생기는거 아니에요?? + - 아니지. 캡슐화를 통해서 인터페이스로 사용을 하잖아 + +- 객체지향 프로그램을 작성할 때는 먼저 협력의 관점에서 어떤 객체가 필요한지를 결정하고, 객체들의 공통 상태와 행위를 구현하기 위해서 클래스를 작성해야한다. + - 🤓 : 협력의 관점에서 어떻게 생각할 수 있을까?? + - 도메인간에 어떻게 상호작용하는지를 보면 알 수 있지 않을까? + +### 협력에 관한 짧은 이야기 + +- 메시지와 메서드를 구분하는 것은 매우 중요하다. 이 개념으로부터 다형성이 출발하기 때문이다. + - 위에서 Reservation의 `calcurateFee()` 는 Money의 `calculateMovieFee()` 를 호출한다고 하였지만, 사실은 Reservation의 `calcurateFee()` 는 Money가 `calculateMovieFee` 이라는 메시지에 응답할 수 있다고 믿고, 메시지를 전달한 것이다. + +# ✅할인 요금 구하기 + +### 할인 요금 계산을 위한 협력 시작하기 + +![6.JPG](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/6.jpg) + +```java +public class Movie { + private String title; + private Duration runnringTime; + private Money fee; + private DiscountPolicy discountPolicy; + + public Movie(String title, Duration runnringTime, Money fee, DiscountPolicy discountPolicy) { + this.title = title; + this.runnringTime = runnringTime; + this.fee = fee; + this.discountPolicy = discountPolicy; + } + + public Money getFee() { + return fee; + } + + public Money calculateMoviewFee(Screening screening) { + return fee.minus(discountPolicy.calculateDiscountAmount(screening)); + } +} +``` + +- Movie를 구현한 클래스이다. +- 제목, 상영 시간, 영화 비용, 할인 정책등을 멤버 변수로 가지고있다. +- `calculateMoviewFee(**)`** 메서드는 영화의 비용을 할인 비용을 적용해서 반환한다. + +- 만약 위 코드를 보고, 아니 할인 정책의 종류를 어떻게 알아요?라고 한다며 아직 객체지향 패러다임에 익숙하지 않은것이다. + - 위 코드에는 객체지향에서 중요하다고 여겨지는 **상속(inheriteance)**과 **다형성**이 숨어있다. + +```java +public abstract class DiscountPolicy { + private List conditons = new ArrayList<>(); + + public DiscountPolicy(DistcountConditon ... conditons) { + this.conditons = Arrays.asList(conditons); + } + + public Money calculateDiscountAmount(Screening screening) { + for(DistcountConditon each : conditons) { + if (each.isSatisfiedBy(screening)) { + return getDiscountAmount(screening); + } + } + return Money.ZERO; + } + + abstract protected Money getDiscountAmount(Screening Screening); +} +``` + +- 위코드는 **할인정책**을 구현한 클래스이고, 이 추상 클래스를 AmountDiscountPolicy와 PercentDiscountPolicy가 상속받을 것이다. +- 멤버 변수 conditions는 여러개의 할인 조건을 가지고 있다. +- `calculateDiscountAmount()` 는 전체 할인조건에 따라 차례대로 DiscountCondition의 `isSatisfiedBy()` 메서드를 호출한다. + - `isSatisfiedBy()` 는 인자로 받은 `Screening`이 조건을 만족하면 true, 만족 못하면 false를 반환한다. + - 할인 조건이 하나라도 존재하면 추상 메서드인 `getDisCountAmount()` 메서드를 호출한다. + - `getDisCountAmount()` 메서드는 할인 요금을 계산하는 메서드이다. + - 만족하는 할인 조건이 하나도 없으면 0원을 반환한다. + +- DiscountPolicy는 할인 여부와 요금 계산에 필요한 전체적인 흐름은 정의하지만 실제로 요금을 계산하는 부분은 추상 메서드인 `calculateDiscountAmount()` 에게 위임하고, DiscountPolicy를 상속받는 자식 클래스들이 오버라이딩하여서 구현할 것이다. + + + +- 🤓 : 아 부모 PostService 클래스에서 기본 CRUD를 구현하고, 자식 클래스에서 더 자세한 로직을 구현할 때 사용할 수 있겠구나 + +```java +public class AmountDiscountPolicy extends DiscountPolicy { + private Money discountAmount; + + public AmountDiscountPolicy(Money discountAmount, DiscountConditon... conditons) { + super(conditons); + this.discountAmount = discountAmount; + } + + @Override + protected Money getDiscountAmount(Screening screening) { + return discountAmount; + } +} +``` + +- 위 DiscountPolicy를 상속받은 자식 클래스이다. +- `super(conditons)` 는 부모 클래스인 DiscountPolicy의 기본 생성자에 접근하여서 인자들을 넘겨준다. + +```java +public class PercentDiscountPolicy extends DiscountPolicy { + private double percent; + + public PercentDiscountPolicy(double percent, DiscountConditon... conditons) { + super(conditons); + this.percent = percent; + } + + @Override + protected Money getDiscountAmount(Screening screening) { + // times()는 bigDecimal 타입의 데이터를 곱하는 함수 + return screening.getMovieFee().times(percent); + } +} +``` + +- 위 DiscountPolicy를 상속받은 자식 클래스이다. +- AmountDiscountPolicy와 다른 점이라면 고정 금액이 아닌 일정 비율을 차감한다는 것이다. + +```java +public interface DiscountConditon { + boolean isSatisfiedBy(Screening screening); +} +``` + +- **할인 조건**의 인터페이스이다. +- 위 인터페이스들을 이용해서 각 할인 조건들을 구현체로 구현할 것이다. + +```java +public class SequenceCondition implements DiscountConditon{ + private int sequence; + + public SequenceCondition(int sequence) { + this.sequence = sequence; + } + + @Override + public boolean isSatisfiedBy(Screening screening) { + return screening.isSequence(sequence); + } +} +``` + +- 순번 조건의 할인 여부를 판단하기 위한 구현체 +- 만약 상영의 순번과 일치할 경우 할인이 가능하다 판단한다. + +```java +public class PeriodConditon implements DiscountConditon { + private DayOfWeek dayOfWeek; + private LocalTime startTime; + private LocalTime endTime; + + @Override + public boolean isSatisfiedBy(Screening screening) { + return screening.getStartTime().getDayOfWeek().equals(dayOfWeek) && + startTime.compareTo(screening.getStartTime().toLocalTime()) <= 0 && + endTime.compareTo(screening.getStartTime().toLocalTime()) >= 0; + } +} +``` + +- 기간 조건을 판단하는 구현체 +- 인자로 전달된 Screening의 상영 요일이 dayOfWeek과 같고, 상영 시작 시간이 startTime과 endTime 사이에 있을 경우 true를 반환 + +- 하나의 영화에 대해 단 하나의 할인 정책만 설정할 수 있지만, 할인 조건의 경우에는 여러개를 적용할 수 있다는 것을 기억하자. + - Movie 생성자의 파라미터 목록을 이용해 초기화에 필요한 정보를 전달하도록 강제하면, 올바른 상태를 가진 객체의 생성을 보장할 수 있다. + +```java +public Movie(String title, Duration runnringTime, Money fee, DiscountPolicy discountPolicy) { +... } +``` + +# ✅상속과 다형성 + +- Movie 클래스 어디에서도 할인 정책이 금액 할인 정책인지, 비율 할인 정책인지를 판단하지 않는다. 그러면 어떻게 정책을 선택할 수 있을까?? + - 상속과 다형성을 이용해 특정한 조건을 선택적을 실행하는 방법을 알아보자. + +```java +public Movie(String title, Duration runnringTime, Money fee, DiscountPolicy discountPolicy) { +... } +``` + +- Movie의 생성자는 DiscountPolicy 타입의 객체를 인자로 받는다. + - AmountDiscountPolicy나 PercentDiscountPolicy는 DiscountPolicy를 상속받기 때문에 Movie 객체를 생성할 때 AmountDiscountPolicy나 PercentDiscountPolicy의 인스턴스를 대신 전달함으로써 할인 정책을 선택할 수 있다. + - 금액 할인 정책을 사용하고 싶으면 AmountDiscountPolicy 인스턴스를 전달하고, 비율 할인 정책을 적용하고 싶다면 PercentDiscountPolicy 인스턴스를 전달해야한다. + + ![**위 사진을 통해 알 수 있듯이 자식 클래스는 부모 클래스의 타입을 물려받는다**](2%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%80%E1%85%A2%E1%86%A8%E1%84%8E%E1%85%A6%E1%84%8C%E1%85%B5%E1%84%92%E1%85%A3%E1%86%BC%20%E1%84%91%E1%85%B3%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3%E1%84%85%E1%85%A2%E1%84%86%E1%85%B5%E1%86%BC%20d315814bc8c848eb938acc725d511ff2/7.jpg) + + **위 사진을 통해 알 수 있듯이 자식 클래스는 부모 클래스의 타입을 물려받는다** + +- 코드의 의존성과 실행 시점(객체를 생성하는 시점)의 의존성이 서로 다를 수 있다는 것이다. + - 즉 클래스 사이의 의존성과 객체 사이의 의존성은 동일하지 않을 수 있다는 것이다. + - Movie 클래스와 AmountDiscountPolicy, PercentDiscountPolicy 클래스는 의존성이 없지만, Movie 객체와 AmountDiscountPolicy, PercentDiscountPolicy 객체는 의존성이 있다. + +- 🤓 : 그러면 Movie의 인스턴스가 어떤 객체에 의존하고 있는지를 어떻게 알 수 있나?? + - Movie 클래스에서는 의존하는 대상이 DiscountPolicy라는 것만 알 수 있다. Movie 인스턴스를 생성하는 부분을 찾아서 생성자에 전달되는 객체를 통해서 알 수 있다. + +- 🤓 : 아니 알겠어 알겠어. 근데 객체지향으로 갈 수록 코드를 보고 이해하기가 오히려 너무 어려워지는데?? + - 설계가 유연해질수록 코드를 이해하고, 디버깅하기는 어려워진다. 반대로 유연성을 억제하면 코드를 이해하고, 디버깅하기는 쉬워지지만 재사용성과 확장 가능성은 낮아진다. + + + +### 상속 + +- 🤓 : 아니 그런데 어떻게 Movie와 DiscountPolicy의 의존성이 실행 시점에 AmountDiscountPolicy, PercentDiscountPolicy의 의존성으로 바뀔 수 있는걸까?? + - 답은 상속이다. + - 상속이 가치 있는 이유는 부모 클래스가 제공하는 모든 인터페이스를 자식 클래스가 물려받을 수 있기 때문이다. + - 자식 클래스는 부모 클래스가 수신할 수 있는 모든 메시지를 수신할 수 있기 때문에 외부 객체는 자식 클래스를 부모 클래스와 동일한 타입으로 간주할 수 있다. + - 컴파일러는 코드 상에서 부모 클래스가 나오는 모든 장소에서 자식 클래스를 사용하는 것을 허용한다. + - 그렇기에 Movie의 생성자 인자 타입이 DiscountPolicy임에도, AmountDiscountPolicy, PercentDiscountPolicy 인스턴스를 전달할 수 있는 것이다. + - 이처럼 자식 클래스가 부모 클래스를 대신하는 것을 **업캐스팅(upcasting)**이라고 부른다. + +- 부모 클래스를 상속해서, 부모 클래스와 다른 부분만을 추가해서 새로운 클래스를 쉽고 빠르게 만드는 방법을 **차이에 의한 프로그래밍**이라고 부른다. + +### 다형성 + +- 메시지와 메서드는 다른 개념이다. + - Movie는 DiscountPolicy의 인스턴스에 calculateDiscountAmount 메시지를 전송한다. + - 이 때 실행되는 메서드는 Movie와 상호작용하기 위해 연결된 객체의 클래스에 따라 달라진다. + - Movie와 협력하는 객체가 AmountDiscountPolicy라면 AmountDiscountPolicy에서 오버라이딩한 메서드가, PercentDiscountPolicy 라면 PercentDiscountPolicy에서 오버라이딩한 메서드가 실행될 것이다. + - Movie는 동일한 메시지를 전송하지만 실제로 어떤 메서드가 실행될 것인지는 메시지를 수신하는 객체의 클래스가 무엇이냐에 따라 달라진다. 이를 **다형성**이라 칭한다. + +- 다형성 : 동일한 메시지를 수신했을 때 객체의 타입에 따라 다르게 응답할 수 있는 능력 + - 즉 객체들은 모두 수신한 메시지를 이해할 수 있어야 하기에, 인터페이스가 동일(= 같은 부모로 부터 상속)하다는 것이다. + - ex) AmountDiscountPolicy와 PercentDiscountPolicy 가 동일한 부모를 상속받아서 같은 인터페이스를 가지게 되고, 이로 인해서 같은 메시지를 이해할 수 있게 된 것 + - 상속은 인터페이스를 통일 시켜서 다형성을 구현하는 방법중 하나이다. + - 객체지향이 컴파일 시점의 의존성과 실행 시점의 의존성을 분리하고, 하나의 메시지를 선택적을 서로 다른 메서드에 연결할 수 있는 이유가 **지연 바인딩**이라는 메커니즘을 사용한 덕분 + +- 🤓 : 그러면 인터페이스와 추상 클래스를 다르게 사용하는 목적이 뭐야??? + - 추상 클래스 → 자식 클래스들이 인터페이스와 내부 구현을 함께 상속 받을 수 있게 할 때 + - 인터페이스 → 구현은 공유할 필요가 없고, 인터페이스만 공유하고 싶을 때 + - 공용 인터페이스를 자극해서 책임을 수행하게 하는 것은 객체에게 전송되는 메시지다. + - 메시지를 따르면 최소의 인터페이스를 얻을 수 있다. + - 쉽게 말하면 인터페이스란 **메서드 선언부**이다. + +# ✅추상화와 유연성 + +- DiscountPolicy는 AmountDiscountPolicy와 PercentDiscountPolicy보다 더 추상적이다. + - 그 이유는 인터페이스에 초점을 맞추기 때문이다. → DiscountPolicy는 모든 할인 정책들이 수신할 수 있도록 메시지를 정의하기 때문이다. + +- 이렇게 추상화를 사용했을 때(=다형성을 구현했을 때)의 장점은 아래와 같다., + 1. 추상화 계층(부모 클래스 or 인터페이스)만 따로 떼어 넣고 살펴보면 **요구사항의 정책을 높은 수준**에서 서술할 수 있다. + 1. ex) 아이패드로 글 쓰기가 아닌 글 쓰기가 더 상위 정책이라고 할 수 있다. + 2. 상위 정책을 기술한다는 것은 기본적인 애플리케이션의 협력 흐름을 기술한다는 것이다. + 3. 재사용 가능한 설계의 기본을 이루는 디자인 패턴이나 프레임워크 모두 추상화를 이용해서 상위 정책을 정의하는 객체지향의 매커니즘을 활용하고있다. + 2. 설계가 좀 더 **유연해진다.** + 1. 기존 구조를 수정하지 않고도 새로운 기능을 쉽게 추가하고, 확장할 수 있다. + 2. ex) 현재 할인 정책이 없는 경우에는 할인 금액이 0원이라는 사실을 결정하는 책임이 Movie에 책임이 있다. 이를 DiscountPolicy에 책임을 주기 위해서는 0원이라는 할인 요금을 계산할 책임을 NoneDiscountPolicy 클래스를 만들어 부여 하면 된다. 이로써 기존 코드를 수정 하지 않고, 애플리케이션의 기능을 확장할 수 있다. → 유연하고 확장 가능한 설계 + + ```java + public Movie(String title, Duration runnringTime, Money fee, DiscountPolicy discountPolicy + ``` + + + + + + +- 🤓 : 왜 DiscountPolicy에서 할인 조건이 없을 경우에는 getDiscountAmount()를 호출하지 않는다고 한걸까? + + ```java + public Money calculateDiscountAmount(Screening screening) { + for(DiscountConditon each : conditons) { + if (each.isSatisfiedBy(screening)) { + return getDiscountAmount(screening); + } + } + return Money.ZERO; + } + ``` + + - 조건이 없을 경우 return으로 바로 빠져오기에 + +### 상속과 합성 + +- 상속의 가장 큰 문제점은 캡슐화를 위반한다는 것이다. + - 상속을 이용하기 위해서는 자식이 부모 클래스의 내부 구조를 잘 알고 있어야 하기 때문이다. + - 캡슐화의 약화는 자식 클래스가 부모 클래스에 강하게 결합되어서 부모가 변경되면 자식도 변경될 확률을 높인다. +- 두 번째 단점은 설계가 유연하지 않다는 것이다. + - 상속은 실행 시점에 객체의 종류를 변경하는 것이 불가능하다. + - 상속을 사용하면 기존 생성된 객체의 클래스를 변경할 수 없기에, 새로운 객체를 생성하고, 기존 객체의 상태를 새로운 상태에 복사 붙여 넣기 할 수 밖에 없다. + +- 그러나 인스턴스 변수로 연결한 기존 방법을 사용하면 실행 시점에 할인 정책을 간단하게 바꿀 수 있다 + +```java +public void changeDiscountPolicy(DiscountPolicy discountPolicy) { + this.discountPolicy = discountPolicy; + } +``` + + + +- 합성은 위 상속이 가진 두 가지 문제점을 모두 해결한다. + 1. 인터페이스에 정의된 메시지를 통해서만 재사용이 가능하기에 구현을 효과적으로 캡슐화 할 수 있다. + 2. 의존하는 인스턴스를 교체하는 것이 비교적 쉽기에 설계를 유연하게 만든다. + +- 🤓 : 코드를 재사용하고 싶다면, 추상 클래스를 상속하는 것보다 합성, 즉 객체를 자신의 인스턴스 변수로 가져와서 사용해라. 그게 아니라 다형성을 위한 것이면 인터페이스를 사용하라! + +[레퍼런스](https://www.notion.so/2d146f71c3b842a592d3476a1199821b) \ No newline at end of file diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/%EC%BA%A1%EC%B2%98.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/%EC%BA%A1%EC%B2%98.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..54a8b1c0bbdf4917122f141687969a92f9b3814b GIT binary patch literal 16318 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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/10.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/10.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..dc818de5e5ed834cb0043a68d7c78a8b24d0bb89 GIT binary patch literal 10077 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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/11.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/11.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bed890464bbcd247e11570aa33c4aa849e7307c3 GIT binary patch literal 11197 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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/12.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/12.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..3b5b50b657cfde96b670d99452a8ff7d6e2bc2ab GIT binary patch literal 23393 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 z zauM9q_i6WPy}2*n)rV*SlzNckjD5()!N4s!uyg_g14|5Za7Rrp**P|q#Re7e6neC# ziDav2vfUMGqe;0Vazab*AW`PxHGSXe!Hq=TZE{TX)sJ8bPw^XdEem{=RURrl_!`5s z0Q+pnobcaPg{HXcqC*^D!hxRFj1Y}4G^?5*Mf>0{Uetmp-G_c&XgTWh9@WBT2D5AP z3ZSXN2lo>&AOHK!gt;Q%0sU<-!*9L+#AmY5djTvu*hYqoE4Ql0hU7?1P4i0dDHQN> V!9DMv4lw>lyZ2udJ<(B<{|6Iim@5DP literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/13.jpg" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245 ac70c50055b8409cbc305c2bd4b837ce/13.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..ebcf33f7cff5819f33bec81494d3aaeb20c2650f GIT binary patch literal 20074 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

_) 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≫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 literal 0 HcmV?d00001 diff --git "a/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" new file mode 100644 index 0000000..afb5ced --- /dev/null +++ "b/book/\354\230\244\353\270\214\354\240\235\355\212\270/3\354\236\245/\354\235\264\354\212\271\352\261\264_\354\230\244\353\270\214\354\240\235\355\212\270_3\354\236\245 \354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" @@ -0,0 +1,191 @@ +# 3장 : 역할, 책임, 협력 + +> “객체지향에서 가장 중요한 것은 역할, 책임, 협력이다. 역할, 책임, 협력이 제자리를 찾지 못한 상태라면 응집도 높은 클래스와 중복 없는 상속 계층을 구현하더라도 의미없다.” +> + +- **협력 →** 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용 +- **책임** → 객체가 협력에 참여하기 위해 수행하는 로직 +- **역할** → 객체가 협력안에서 수행하는 책임들이 모여 객체가 수행하는 것 + +# ✅협력 + +```java +public class Screening { + + public Money calculateFee(int audienceCount) { + return movie.calculateMovieFee(this).times(audienceCount); + } +``` + +- 위 코드에서처럼 **협력**은 하나의 객체(Screen)가 다른 객체(Movie)에게 도움을 요청할 때 시작된다. + - 객체는 다른 객체의 상세한 내부 구현에 직접 접근할 수 없기에(private으로 캡슐화를 했기에) 오직 메시지 전송을 통해서만 자신의 요청을 전달할 수 있다. + +```java +public class Movie { + public Money calculateMovieFee(Screening screening) { + return fee.minus(discountPolicy.calculateDiscountAmount(screening)); + } +} +``` + +- 메시지를 수신한 객체(Movie)는 메서드(`calculateMovieFee`)를 실행해 요청에 응답한다. + - 메시지를 수신한 객체는 메시지를 처리할 방법(로직)을 스스로 선택한다는 점이 중요하다. 외부 객체는 오직 메시지만 전송할 수 있다. → 이는 객체가 자율적인 존재라는 것을 뜻한다. + - 메시지를 수신한 객체(Movie)는 메시지를 처리하던 중에 직접 처리할 수 없는 정보나 행동이 필요한 경우 또 다른 객체(discountPolicy)에게 위처럼 도움을 요청할 수 있다. +- Screening이 Movie에게 처리를 위임하는 이유는 요금을 계산하는데 필요한 기본 요금과 할인 정책을 가장 잘 알고 있는 객체가 Movie이기 때문이다. + +- 객체 사이의 협력을 설계할 때는 객체를 서로 분리된 인스턴스가 아닌 협력하는 파트너로 인식해야 한다. → 즉 Movie와 Screeening은 영화를 예매하는 협력에 참여한다. + +- 🤓 : 캡슐화시 객체가 가질 수 있는 상태와 행동은 어떤 기준으로 결정해야하나?? 객체를 설계할 때 어떤 행동과 상태를 할당했다면 이유는 무엇인가? + - 객체의 행동을 결정하는 것은 객체가 참여하고 있는 **협력**이다. + - 협력은 객체가 필요한 이유와 객체가 수행하는 행동의 동기를 제공한다. + +```java +public class Movie { + private Money fee; + private DiscountPolicy discountPolicy; + + public Money calculateMovieFee(Screening screening) { + return fee.minus(discountPolicy.calculateDiscountAmount(screening)); + } +} +``` + +- **상태(변수)**는 객체가 행동하는 데 필요한 정보에 의해 결정되고, **행동(메서드)**은 협력 안에서 객체가 처리할 메시지로 결정한다. +- Movie는 영화를 예매하기 위한 협력에 참여 하고있다. +- Movie가 기본 요금인 fee와 할인 정책인 discountPolicy라는 인스턴스 변수를 상태의 일부로 포함하는 이유는 요금 계산이라는 행동을 수행하는데 해당 상태가 필요하기 때문이다. + +

+ +# ✅책임 + +- 협력이 갖춰진 다음 할 행동은, 협력에 필요한 행동을 수행할 수 있는 적절한 객체를 찾는 것이다. 이 때 객체가 수행하는 행동을 **책임**이라고 부른다. + +- 객체의 책임은 ‘하는 것’과 ‘아는 것’의 두가지 범주로 나누어 세분화된다. + + ![캡처.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/%25EC%25BA%25A1%25EC%25B2%2598.jpg) + + +- 하는 것 + - Screening의 책임은 영화를 예매하는 것 + - Movie의 책임은 요금을 계산하는 것 +- 아는 것 + - Screening은 `영화를 예매하기 위해` 자신이 상영할 영화를 알고 있어야 한다. + - Movie는 `요금을 계산하기 위해` 가격과 어떤 할인 정책이 적용됐는지도 알고 있어야 한다. + +- 🤓 : 객체의 책임은 하나라는 SRP는, 하는 것과 아는 것을 한 세트로 치는 것이다. + +- 위 예시를 보면 알 수 있듯이 객체는 자신이 맡은 책임을 수행하는 데 필요한 정보를 알고 있을 책임이 있다. +- 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스(메서드)와 내부의 속성(변수)을 결정한다. + + + +![객체지향 설계간에 적용해보는건 어떨까???](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/8.jpg) + +객체지향 설계간에 적용해보는건 어떨까??? + +- 자율적인 객체를 만드는 가장 기본적인 방법은 책임을 수행하는 데 필요한 정보를 가장 잘 알고있는 전문가에게 그 책임을 할당하는 것이다. → **Information expert 패턴** + - 일상생활에서 문제가 생기면 누구에게 도움을 청하나?? 가장 전문가에게 청하지 않는가?? 이와 똑같다. + +- **책임 주도 설계** → 위 같이 책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식 + 1. 시스템이 사용자에게 제공하는 기능을 시스템이 담당할 하나의 책임으로 바라본다. 이게 **협력**이다. + 1. ex) 시스템은 사용자에게 영화를 예매할 수 있게 해야해 + 2. 시스템 책임을 더 작은 책임으로 분할한다. + 3. 분할 된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다. + 1. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요하면 이를 책임질 적절한 객체 또는 역할을 찾는다. + 4. 2~3번을 반복한다. + +- ex) 영화 예매 시스템을 예로 정보 전문가에게 책임을 할당하는 방법 +1. 시스템은 사용자에게 영화를 예매하는 기능을 제공해야 해 → “예매해라” 라는 시스템의 책임으로 할당 → 책임을 할당한다는 것은 메시지의 이름을 결정하는 것과 같다. → “예매해라”라는 협력 + + ![9.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/9.jpg) + +2. “예매해라”라는 협력을 처리할 수 있는 객체를 선택해야 한다. → 예매에 관련 된 정보를 가장 많이 알고 있는 객체(정보 전문가)인 Screening에게 할당한다. + + ![10.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/10.jpg) + +3. 예매하기 위해서는 가격을 계산 해야 하는데 Screening 힘으로는 못하기에, 외부 객체에게 가격 계산 요청 → “가격을 계산해라”라는 협력을 처리할 수 있는 객체를 선택 + + ![11.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/11.jpg) + +4. 2~3번을 반복한다. + +- 책임을 할당할 때 고려해야 할 두 가지 요소 + 1. 메시지가 객체를 결정한다. + 2. 행동이 상태를 결정한다. + +### 메시지가 객체를 결정한다. + +- 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 해야 하는 두 가지 이유 + - ex) “예매해라”라는 메시지에 가장 알맞은 정보 전문가 객체를 선택 + 1. 객체가 최소한의 인터페이스를 가질 수 있게 된다. + 1. 메시지를 수신하기 전까지 객체에 어떤 것도 추가 하지 않기에 + 2. 객체는 충분히 추상적인 인터페이스를 가질 수 있게 된다. + 1. 메시지는 외부의 객체가 요청하는 무언가를 의미하기 때문에 메시지를 먼저 식별하면 무엇을 수행할지에 초점을 맞추는 인터페이스를 얻을 수 있다. + +### 행동이 상태를 결정한다. + +- 객체가 존재하는 이유는 협력에 참여하기 위해서이고, 객체는 따라서 협력에 필요한 행동을 제공해야 한다. + + + +- 객체지향 초보자들은 먼저 객체에 필요한 상태가 무엇인지를 결정하고, 그 후에 상태에 필요한 행동을 결정한다. + - 이런 방식은 객체의 내부 구현이 객체의 퍼블릭 인터페이스에 노출되도록 만들기에 캡슐화를 저해한다. + + +# ✅역할 + +- 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 **역할**이라고 부른다. + - 협력을 모델링할 때는 특정한 객체가 아니라 역할에게 책임을 할당한다고 생각하는 것이 좋다. + +- 영화 예매 협력에서 “예매하라”라는 메시지를 처리하기 위한 과정은 사실은 두 독립적인 단계가 합쳐졌다. + 1. 영화를 예매할 수 있는 적절한 역할이 무엇인가를 찾는다. + 2. 역할을 수행할 객체로 Screening 인스턴스를 선택한다. + +- 🤓 : 아니 굳이?? 그냥 **역할** 없이 메시지를 수행할 객체를 찾으면 안돼?? 설계가 한 단계 더 생기잖슴 + - **상속**을 생각하면 왜 역할이 필요한지 알게 될 걸~!! + - 그냥 역할 없이 메시지를 수행할 객체를 찾는다고 가정하자. + - 예를 들어서 “할인 요금을 계산하라”라는 메시지를 Movie 객체가 보냈다고 치자. 그러면 메시지를 해결할 수 있는 객체를 찾을 거야. 이 때 해결할 수 있는 객체는 AmountDiscountPolicy랑 PercentDiscountPolicy 2개잖아. 그러면 두 종류의 객체가 참여하는 협력을 개별적으로 만들어줘야겠네? + + ![12.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/12.jpg) + + - 이렇게 두 협력을 구현하면 AmountDiscountPolicy와 PercentDiscountPolicy의 코드가 대부분 중복하지 않겠니?? + - 그렇기에 해결할 수 있는 객체가 아니라 “할인 요금을 계산하라”라는 메시지를 해결할 책임에 초점을 맞추고 봐야해! + - 그러면 AmountDiscountPolicy와 PercentDiscountPolicy 모두 할인 요금 계산이라는 동일한 책임을 수행하고있다는 것을 알 수 있지. 그러면 생각나는거 있지 않니?? **상속을 통한 추상화** + - 또한 **추상화**는 협력 안에서 두 종류의 객체를 교대로 바꿔 끼울 수 있는 일종의 **슬롯**으로 생각할 수 있지. + - 추상화 == 슬롯 == 역할 + + ![13.JPG](3%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8B%E1%85%A7%E1%86%A8%E1%84%92%E1%85%A1%E1%86%AF,%20%E1%84%8E%E1%85%A2%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%B7,%20%E1%84%92%E1%85%A7%E1%86%B8%E1%84%85%E1%85%A7%E1%86%A8%20ac70c50055b8409cbc305c2bd4b837ce/13.jpg) + + +- 🤓 : ㅇㅋㅇㅋ 알겠어. 그런데 만약 메시지를 해결할 수 있는 객체가 하나밖에 없는데도 굳이 역할이 필요해?? + - 협력에 적합한 책임을 수행하는 대상이 한 종류라면 간단하게 역할이 아니라 객체로 간주하고, 위 같이 여러 객체들이 참여할 수 있다면 역할이라고 불러!! + + + +- 실 설계간에는 아래와 같이 해보자 + - 처음에 특정 시나리오에 대한 협력을 구상한다면 아마도 도메인 모델에 있는 개념들을 후보로 선택해서 직접 책임을 할당할 것이다. + - 이 때 다양한 시나리오를 설계로 옮기면서 협력을 지속적으로 정제하다 보면 두 개 이상의 협력이 거의 유사한 구조(같은 메시지를 응답할 수 있다는 것)를 보인다는 것을 발견할텐데 이 때 역할을 사용해보자! + +- 역할의 가장 큰 장점은 설계의 구성 요소를 추상화할 수 있다는 것이다. + +- 하나의 배역을 여러 배우가 연기할 수 있는 것처럼 동일한 역할을 수행하는 하나 이상의 객체들이 존재할 수 있다. + - 이것은 협력 관점에서 동일한 역할을 수행하는 객체들은 서로 대체 가능하다는 것을 의미한다. → **다형적** +- 또한 객체는 여러 협력에 참여하면서 다양한 역할을 수행할 수 있으나, 협력 안에서는 하나의 역할로 보여진다. + + \ No newline at end of file diff --git a/d b/d new file mode 100644 index 0000000..a37c368 --- /dev/null +++ b/d @@ -0,0 +1,47 @@ +commit 9592907c998f7ce9790af9e1e0080e3fd5f58d46 (HEAD -> master, origin/master, origin/HEAD) +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 21:10:03 2022 +0900 + + chores : 간격 수정 + +commit 0b6d57b14d7057d00fe42bfa73de14e136e080be +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 21:08:37 2022 +0900 + + add : 책 미션 진행 방법 내용 추가 + +commit 25cbb4c0d0aab09550d604b5f9e4c68c6ba51d82 +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 20:59:03 2022 +0900 + + chores : README.md 레포 이름 수정 + +commit cf74f9ed9e47f4aac33c9cb50fbecb2e3ceeaa30 +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 20:55:20 2022 +0900 + + add : 1주차 추가 + +commit 78d5e243925258900e844741ab31ed4f15117056 +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 20:55:07 2022 +0900 + + add : 미션 제출 방법 추가 + +commit 3101420774f49668ab1dca3a01a879d03b08917d +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 20:22:56 2022 +0900 + + add : 숫자 야구 미션 추가 + +commit 1515a15dca160ff740abd300ee0520ee323daffe +Author: JeonginKim <47661695+mywnajsldkf@users.noreply.github.com> +Date: Sat Nov 19 20:16:03 2022 +0900 + + add : .gitignore 추가, README.md 작성 + +commit 46966f567b122b98eae019d698b5a0fb8767cbb7 +Author: mywnajsldkf +Date: Thu Nov 17 09:48:39 2022 +0900 + + first commit