2019.01.16(수) 분명 오전에 한 챕터 읽었는데 기억이 나지 않는다.
그래서 정리 하기로 했다.
01. 협력하는 객체들의 공동체
"시너지를 생각하라, 전체는 부분의 합보다 크다."
클래스를 떠올리기 전에 객체를 먼저 떠올려라.
"실세계를 모방한 것이 객체지향이다."라는 용어는 객체를 설명하기 편리한 용어이나 실 세계를 반영 할 수 없다.
버트란드 마이어 : "소프트웨어 시스템이 해결하려고 하는 실제는 잘해봐야 먼 친척 밖에 되지 않는다"
-> 실 세계를 소프트웨어 반영할 때 100프로란 없다.
객체 지향이라는 용어를 사용 할 때는 소프트웨어에 실세계를 전부 반영할 수 있다는 의미보다는 객체란 '대략'적으로 세계를 반영 할 수 있는 개념으로 생각하는 편이 도움이 된다.
공동을 목적을 달성하기 위해 "협력"을 하며 협력 할 때 "메시지"를 주고 받는다.
메시지는 명시적으로 계약 한 일종의 행위이자 함수이다.
1. 커피 공화국
2019.01.16(수)
요청과 응답으로 구성 된 협력
요청 : |손님| -> (커피를 주문한다) -> |캐시어| -> (커피를 제조하라) -> |바리스타|
응답 : |바리스타| -> (커피 완성) -> |캐시어| -> (커피 완성) -> |손님|
어찌 보면 Spring MVC 패턴과 유사하다.
손님, 캐시어, 바리스타가 각각의 역할에 맞는 책임을 다하면서 협력하여 목적을 달성한다.
(객체) : 적합한 책임을 수행에 필요한 개념
1. 여러 사람이 동일한 역할을 수행할 수 있다. : A캐시어가 그만두면 꼭 A라는 캐시어를 고집하지 않아도 된다. B를 새로 채용하면 된다.
2. 역할은 대체 가능성을 의미한다. : 손님 입장에서는 A 바리스타가 만드나 B 바리스타가 만드나 개의치 않는다.
3. 책임을 수행하는 방법은 자율적으로 선택 할 수 있다 : 바리스타가 커피에 데코를 하건 안하건 자율적이다.
4. 한 사람이 동시에 여러 역할을 수행 할 수 있다. : 캐시어가 주문을 받고 커피를 만들수도 있다.
개념 정리
-> 변경하면 객체 지향의 기본 개념을 설명 할 수 있는 은유적 표현이 되어 비교적 쉽게 객체 지향에 대한 설명을 할 때 "실 세계를 반영했다"라고 설명하는 이유가 될 수 있다.
객체 시민 : 자신에게 주어진 역할과 책임을 다하는 동시에 시스템의 더 큰 목적을 이루기 위해 더 큰 목적을 이루기 위해 다른 객체와도 적극적으로 협력한다.
객체의 두 가지 덕목
협력과 자율
적절한 역할과 책임으로 할 수 없는 부분에 대해서는 협력 할 수 있어야 한다.
객체의 상태와 행동
정리
객체는 역할, 책임, 협력을 기반으로 한다.
2. 이상한 나라의 앨리스
2019.01.17(목)
행동이 상태를 결정한다.
소프트웨어는 실세계를 모방한 것이 아니라 새롭게 창조하는것이다.
새롭게 만든 소프트웨어는 실세계와 다른 형태로 존재한다.
객체지향의 인지능력
이상한 나라의 앨리스
키가 크건 못생기건 우리가 바라보는 앨리스는 항상 앨리스이다.
객체는 상태가 어떻게 변해도 유일한 존재이다.
상태
상태는 과거에 영향을 받는다.
과거의 이력을 모두 보기 보다는 현재의 상태(값)를 가짐으로써 과거를 확인 하지 않아도 된다.
행동
목적을 위해서는 움직여야 한다.
작은 문에 들어가기 위해서
프로퍼티와 프로퍼티 값
프로퍼티는 특정 명칭을 뜻하는 변수이다.(정적)
프로퍼티값은 변수에 들려 있는 값이다.(동적)
실 세계의 객체와 소프트웨어의 객체
앨리스가 음료를 마신다.
앨리스는 마시고 음료는 마셔진다.
소프트웨어에서는 앨리스라는 객체와 음료라는 객체는 각각의 자율성을 가지고 있다.
앨리스 객체의 행동이 음료 객체에 영향을 미치지만 음료는 자율적으로 스스로의 상태를 변경해야 한다.
의존 관계
행동의 결과는 객체의 상태에 의존한다.
전날에 야근을 하고 다음날 출근하면 컨디션이 굉장히 안좋아서 능률이 저하된다.
상태 캡슐화
식별자
기계의 객체
의인화
은유
소프트웨어에서는 영화 속 캐릭터처럼 사람에게 능력을 부여 하고 사용 할 수 있다.
실 세계와 다른 점이다.
3. 타입과 추상화
2019.01.18(금)-다시 읽기로 했다
2019.01.19(토)-다시 읽었다.
컴퓨터를 조작하는 일이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다.
- 키스 데블린(2003)
런던 지하철 개통과 노선도
노선도의 목적은 손님이 현재 역에서 원하는 목적지 역까지 가려면 어떻게 가야하는지 알기 위한 목적이다.
초기 노선도는 지형까지 고려했고 지도를 보는데 불필요한 부분으로 혼란을 가중 했지만 추후 역에서 역으로의 연결의 목적에면 충실하고 불필요한 부분을 제거함으로써 현대까지 계속해서 쓰이고 있다.
추상화
복잡성을 다루기 위해 추상화는 두 차원에서 이루어 진다. - Kramer(2007)
-> 모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 기억하라.
그룹으로 나누기/ 일반화와 특수화
개념
집합에 속하는 것들을 이루는 개념
타입
"개념이 없다." 라는 말은 구분이 없고 분류가 없다는 말과 같다.
"타입이 없다." 라는 말은 데이터의 구분이 없고 데이터의 분류가 없다는 말과 같다.
숫자형 타입, 문자형 타입, 참/거짓 타입이 없이 0과 1로만 데이터를 구분하고 분류한다면 데이터를 바로 보고 파악 하기 어렵기 때문에 개념이 모호하다라거나 없다고 한다.
정말 천재라서 0과 1의 연속 된 자리를 보고 바로바로 연산하는 사람을 빼고는 개념이 없다고 보는게 맞다."
객체와 타입, 그리고 행동
클래스
4. 책임, 역할, 협력
놓여진 상황에서 협력을 하기 위해 역할을 정하고 역할에 대한 책임을 다하여 행동한다.
협력
책임
행동 할 의무가 있는 경우에는 책임을 다한다.
시민의 의무같이 행동으로 책임을 다해야 한다.
객체는 책임을 다히기 위해서 갖추어야 하는 하는 것, 아는 것이 있다.
하는 것 : 무엇을 할 수 있는가/ 외부에 제공해 줄 수 있는 서비스의 목록과 기능
아는 것 : 무엇을 알고 있는가/ 외부에 제공 해 줄 수 있는 정보와 상태
판사가 하는 것과 아는것, 증인이 하는 것과 아는 것
역할
객체 지향의 선입견 3가지
객체 지향 설계 기법
5. 책임과 메시지
2019.01.22 : 이전에 나왔던 내용이랑 비슷한거 아닌가해서 다시 읽기로 했다.
2019.01.23 : 객체 지향의 핵심은 추상화를 얼마나 잘하는가인거 같다.
HOW/WHAT : '어떻게'가 아니라 '무엇'을 할지를 결정한다.
WHAT/WHO : '어떤' 행위를 수행할것인지를 결정하고 '누가' 행 할것인지를 결정한다.
객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택해야 한다.
행동에 책임이 따라야 도의적인이고 자율적인 책임이라고 생각한다.
자율적인 책임
메시지와 메서드/ 메시지를 따라라
메시지는 객체 지향의 핵심이다.
객체 인터페이스
상태와 행동을 하나의 단위로 묶은 자율적인 실체다. 이 관점이 데이터 캡슐화라고 한다.
이처럼 외부에서 객체와 의사 소통 할 수 있는 고정 된 경로를 공용 인터페이스라고 한다.
캡슐화(영어: encapsulation)는 객체 지향 프로그래밍에서 다음 2가지 측면이 있다:[1][2]
6. 객체 지도
기능과 구조의 조화
길을 찾는게 목적이므로 길을 물어서 가는 방법이 사용자 측면에서는 편리하다.
길에 사람이 없거나 물어보는 사람이 길을 모르는 경우에는 지도를 볼줄 알아야 한다.
무슨 말인가
소프트웨어는 사용자가 무엇을 원하는지,
원하는 것을 만족시키기 위해 시스템이 어떤 기능을 제공해야 하는지 초점을 맞추어야 한다.
사용자의 요구사항을 해결하기 위해서 기능적 측면에서 바라보고
시스템을 유지보수 및 변경 가능하기 쉽도록 구조적 측면으로 바라봐야한다.
결국 두 관점에서 잘 보고 만들어야 한다.
구조적 측면
도메인 모델
표현적 차이
기능적 측면
사용자의 목적과 목표에 부응하는 설계를 가져야 한다.
이를 표현하는 방법으로 유스케이스를 들 수 있다.
유스케이스
7.함께 모으기
개념 관점
명세 관점
구현 관점
인터페이스와 구현을 분리하라.
참고 내용
후기
'나(다) > 책' 카테고리의 다른 글
이펙티브 자바 - 1장 : 들어가기 (0) | 2020.12.12 |
---|---|
니체의 말2 (0) | 2020.12.08 |
니체의 말1 (0) | 2020.12.05 |
Very Simple(베리 심플) : 인생이 한결 편안해지는 미니멀 사고 (0) | 2020.12.02 |
자기 관리론 - 데일 카네기 (0) | 2020.12.01 |