일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- Linked List
- 비동기
- COLOR
- 동기화
- 인프런
- core data
- 상호배제
- Algorithm
- SwiftUI
- Apple Developer Academy
- 100 days of SwiftUI
- IOS
- scrollview
- Swift
- deadlock
- decode
- Codable
- 오브젝트
- 동시성
- 앨런
- 가상 메모리
- forEach
- UserDefaults
- async
- 프로세스 스케줄링
- @state
- 운영체제
- 데드락
- struct
- Today
- Total
기어가더라도 제대로
객체지향의 사실과 오해 - 1 - 본문
개발 관련 독서 스터디의 과제로 책의 내용을 정리한 글입니다.
01/ 협력하는 객체들의 공동체
협력하는 사람들
* 커피 공화국의 아침요청과 응답으로 구성된 협력역할과 책임
* 역할, 책임, 협력
기능을 구현하기 위해 협력하는 객체들역할과 책임을 수행하며 협력하는 객체들
* 협력 속에 사는 객체
* 상태와 행동을 함께 지닌 자율적인 객체협력과 메시지메서드와 자율성
객체지향의 본질
* 객체를 지향하라
일반적으로 객체지향을 이야기할 때, 떠오르는 생각들이 있다. 현실세계를 프로그래밍 세계를 옮겨왔다는 착각이 그것이다. 이 착각은 객체지향을 배우는 시점에서는 나름의 유익성이 있지만, 이 비유는 실제 프로그래밍을 하면서는 거리감이 있다. 예를들면 현실 세계의 방화벽은 화재를 막지 허가되지 않은 네트워크를 차단하지 않는다. 또 다른 예로는 현실 세계의 타이어는 자기 스스로를 갈아 끼우지 못하지만, 객체지향에서 타이어는 스스로 공기압을 체크해서 타이어를 갈아 끼울 수도 있다. 이게 무슨 말인가 싶지만 앞으로 차분히 설명을 해드리겠습니다.
현실도 그렇다. 우리가 스타벅스에 들어가면 무엇을 해야하는가? 커피를 주문해야한다. 이것은 우리의 의무이자 권리이다. 이제 우리는 외국식으로 표기된 명찰을 달고 있는 캐셔(남, 에보니)에게 주문을 해야한다. 캐셔는 주문을 그냥 지나치면 안된다. 주문을 바리스타에게 넘기고, 그 주문을 바탕으로 바리스타는 커피를 내린다. 만든 커피는 캐셔에게 가고 캐셔는 다시 그 커피를 손님에게 내준다. 이런 예시가 학습시에 객체지향을 현실에 비유 했을 때 얻기 쉬운 장점이다. 이해가 잘된다.
아하! 객체지향이란 메시지를 기반으로 역할이 나눠져 있는 객체들이
공통의 기능을 하기 위해 모여있는 것이구나!''
그렇다. 아주 이해가 쏙쏙 된다. 커피 한 잔을 받는 이벤트에서도 많은 사람들의 협력이 필요하다. 그런 사람들의 책임을 기반으로 한 역할이 모여 협력을 이루어 커피 한 잔을 내놓게 된다. 다른 말로는 요청과 응답이 모여 협력을 이룬다.
사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 알고 있거나
서비스를 제공해줄 수 있는 사람에게 도움을 요청(Request)한다.
...
요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공한다.
즉, 다른 사람의 요청에 응답(Response)한다.
객체지향의 사실과 오해, P26
사람들은 다른 사람과 협력하는 과정에서 특정한 역할을 부여받는다. (like 손님, 캐셔, 바리스타). 역할은 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미한다. 즉, 역할이라는 단어는 의미적으로 책임이라는 개념을 내포한다. 여기서 사람이라는 단어를 객체로, 에이전트의 요청을 메시지로, 에이전트가 요청을 처리하는 방법을 메서드로 바꾸면 맥락이 맞다.
무엇을 충족해야 객체라 부를까? 바로 두가지를 충족하면 된다. 하나는 협력이고, 다른 하나는 자율이다. 협력적인 객체란 다른 객체의 요청에 귀기울이고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다. 자율적인 객체란 공동의 목표를 위해 협력에 참여하지만 객체 스스로의 결정과 판단에 따라 행동하는 자율적인 존재라는 뜻이다.
'기타' 카테고리의 다른 글
220310. Protocol 외 다수 (0) | 2022.03.10 |
---|---|
객체지향적으로 사고를 해보자 (from 2022.03.07 강의, 코드스쿼드) (0) | 2022.03.07 |
20220224 - Struct vs Class 외 다수 (0) | 2022.02.24 |
AppElements (0) | 2022.02.21 |
GitHub Gist를 원격에서 편집하기 (feat. git) (0) | 2021.12.31 |