From d64261a671bd0873cbb986070e796f659f2acb09 Mon Sep 17 00:00:00 2001 From: dhlee3994 Date: Fri, 31 May 2024 12:09:12 +0900 Subject: [PATCH] Add week1 --- 2024/TheEssenseOfObjectOrientation/ch01.md | 11 +++++++++++ 2024/TheEssenseOfObjectOrientation/ch02.md | 19 +++++++++++++++++++ 2024/TheEssenseOfObjectOrientation/ch03.md | 15 +++++++++++++++ 2024/TheEssenseOfObjectOrientation/ch04.md | 14 ++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 2024/TheEssenseOfObjectOrientation/ch01.md create mode 100644 2024/TheEssenseOfObjectOrientation/ch02.md create mode 100644 2024/TheEssenseOfObjectOrientation/ch03.md create mode 100644 2024/TheEssenseOfObjectOrientation/ch04.md diff --git a/2024/TheEssenseOfObjectOrientation/ch01.md b/2024/TheEssenseOfObjectOrientation/ch01.md new file mode 100644 index 0000000..4a193ec --- /dev/null +++ b/2024/TheEssenseOfObjectOrientation/ch01.md @@ -0,0 +1,11 @@ +# ch01. 협력하는 객체들의 공동체 + +- 객체지향의 목표는 새로운 세계를 창조하는 것 +- 객체는 서로 협렵(요청 + 응답)한다. +- 협력 과정 속에서 특정한 역할(role)과 그에 대한 책임을 부여 받음 + - 여러 객체가 동일한 역할을 수행 할 수 있음 => 역할은 대체가능 + - 객체는 책임 수행 방법을 자율적으로 선택 + - 요청 객체는 응답 객체의 책임 수행 방법을 몰라도 됨 + - 하나의 객체가 동시에 여러 역할을 수행할 수 있음 +- 객체 + - 애플리케이션의 기능을 구현하는 협력적, 자율적 존재 diff --git a/2024/TheEssenseOfObjectOrientation/ch02.md b/2024/TheEssenseOfObjectOrientation/ch02.md new file mode 100644 index 0000000..43676b5 --- /dev/null +++ b/2024/TheEssenseOfObjectOrientation/ch02.md @@ -0,0 +1,19 @@ +# ch02. 이상한 나라의 객체 + +- 상태를 결정하는 것은 행동이지만 행동의 결과를 결정하는 것은 상태 +- 상태 + - 상호작용에 어떻게 반응하는가를 결정 + - 프로퍼티 + - 상태를 구성하는 모든 특징 + - 속성(단순 값)과 링크(다른 객체를 가리키는 값)로 표현가능 +- 행동 + - 부수 효과(side effect)를 일으킴 + - 협력하는 다른 객체에 메시지를 전송 +- 상태의 캡슐화 + - 객체는 자신의 상태를 스스로 관리하는 '자율적' 존재 + - 메시지 송신자는 수신자의 상태 변경에 대해서는 전혀 알지 못하는 것이 캡슐화 + - 캡슐화로 인해 객체의 자율성을 높임 + - 객체의 행동에 초점을 맞춰야 함 + - 객체가 다른 객체와 협력할 수 있는 유일한 방법은 행동 +- 쿼리(query): 객체의 상태를 조회하는 작업 +- 명령(command): 객체의 상태를 변경하는 작업 diff --git a/2024/TheEssenseOfObjectOrientation/ch03.md b/2024/TheEssenseOfObjectOrientation/ch03.md new file mode 100644 index 0000000..b3034ef --- /dev/null +++ b/2024/TheEssenseOfObjectOrientation/ch03.md @@ -0,0 +1,15 @@ +# ch03. 타입과 추상화 + +- 추상화 + - 목적에 맞게 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도 감소 + - 데이터 추상화: 공통된 특징으로 그룹으로 분류(classification) + - 어떤 특징으로 그룹화하는지에 따라 달라짐 + - 객체의 행동으로 그룹화 + - 객체는 행위에 따라 상태가 변할 수 있기 때문 + - 타입(type) + - 공통점을 기반으로 객체들을 묶기 위한 틀 + - 타입에 속한 데이터를 메모리에 어떻게 표현하는지를 감춤 + - 일반화/특수화 + - 일반적인 타입(슈퍼타입): 특수한 타입이 가진 모든 행동 중 일부 **행동**만을 가지는 타입 + - 특수한 타입(서브타입): 일반적인 타입이 가진 모든 타입을 포함하고, 자기만의 **행동**을 추가하는 타입 + - 제어 추상화: 내부 로직을 숨김 diff --git a/2024/TheEssenseOfObjectOrientation/ch04.md b/2024/TheEssenseOfObjectOrientation/ch04.md new file mode 100644 index 0000000..40b0b21 --- /dev/null +++ b/2024/TheEssenseOfObjectOrientation/ch04.md @@ -0,0 +1,14 @@ +# ch04. 역할, 책임, 협력 + +- 객체는 협력(요청 + 응답)관계로 이루어짐 +- 객체는 요청(메시지 전송)에 대해 적절한 행동을 할 의무(책임)가 있음 +- 역할(role) + - 하나의 책임을 수행하는 객체는 여러개일 수 있기 때문에 책임을 수행하는 역할을 부여 + - 역할을 대체하기 위해서는 행동이 호환되어야 함 + - 수신받은 메시지(요청)를 동일한 방식으로 이해할 수 있어야 함 +- 역할을 통해 협력을 추상화 할 수 있음 +- 하나의 객체는 역할에 주어진 책임 외에 다른 책임을 수행할 수도 있음 +- 깔끔한 협력 설계 + 1. 협력 문맥에서 객체가 수행하게 될 적절한 책임을 결정 + 2. 행동을 수행하는데 필요한 데이터 결정 + 3. 클래스의 구현 방법 결정