Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
[객체지향의 사실과 오해] Chapter 1
- 객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임이라는 설명
- 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합
- 하지만 유연하고 실용적인 관점에서의 객체지향 분석, 설계를 설명하기 적합하지 않다.
- 객체 지향의 목표는 실세계를 모방하는 것이 아니다.
- 새로운 세계를 창조하는 것이 목표
- 그렇다면 왜 자꾸 실세계의 모방이라는 비유를 하는 것인가?
- 상태와 행위를 캡슐화하는 소프트웨어의 객체의
자율성을 설명하는데 효과적이기 때문 - 목표를 위해 협력하는 사람들의 관계는 메시지를 주고받으며 협력하는 객체들의 관계 설명
- 객체지향 설계의 핵심 사상인
연결완전성을 설명하기에 적합한 비유
- 상태와 행위를 캡슐화하는 소프트웨어의 객체의
협력하는 사람들
- 커피를 시켜 먹는 과정 속에는 손님, 캐시어, 바리스타 사이의 암묵적
협력관계가 존재 - 손님, 캐시어, 바리스타라는
역할과 각 역할에 대한책임이 존재
요청과 응답으로 구성된 협력
- 스스로 해결하지 못하는 문제와 마주치면 문제를 해결해줄 수 있는 사람에게 도움을
요청 - 하나의 문제를 해결하려면 다수의 역할이 필요 → 요청이 연쇄적으로 발생
- 손님이 캐시어 에게 커피 주문 요청
- 캐시어는 바리스타에게 커피 제조 요청
- 요청 받은 사람은 주어진 책임을 다하여 요청에
응답- 바리스타는 제조한 커피를 캐시어에게 전달
- 캐시어는 손님 주문에 응답
역할과 책임, 협력
- 역할: 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무
- 책임이라는 개념을 내포하는 단어
- 특정한 역할은 특정한 책임을 암시
- 협력에 참여하며 특정한 역할을 수행하는 객체는 역할에 적합한 책임을 수행한다.
- 여러 객체가 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 누가 역할을 수행하든 요청자 입장에서는 상관 없다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 요청 받은 객체는 요청을 처리하는 방법을 자유롭게 선택할 수 있다.
- 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력을
다형성이라고 한다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
- 시스템 = 역할과 책임을 수행할 수 있는 객체로 분할
- 시스템의 기능 = 객체 간 연쇄적인 요청과 응답으 흐름으로 구성된 협력으로 구성
협력 속에 사는 객체
- 협력에 참여하는 주체는
객체 - 객체는 애필리케이션 기능을 구현하기 위해 존재
- 객체의 덕목
협력적이어야 한다.- 다른 객체의 요청에 응답
- 요청에 응할지 여부도 스스로 결정 가능
자율적이어야 한다.- 객체는 공동의 목표를 달성하기 위해 협력하지만 스스로 결정과 판단에 따라 행동하는 자율적인 존재
- 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적
- 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 자율적
상태와 행동을 함께 지닌 자율적인 객체
- 객체 = 상태와 행동을 함께 지닌 실체
- 객체가 협력에 참여하려면 행동을 하는데 필요한
상태도 함께 지니고 있어야 한다는 것 - 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
- 객체는 다른 객체가 무엇을 수행하는 지만 알고
어떻게수행하는지에 대해서는 알 수 없다. - 행동에 필요한 상태를 포함하는 동시에 특정한 행동을 수행하는 방법을 스스로 결정해야 함
- 객체는 다른 객체가 무엇을 수행하는 지만 알고
- 객체간의 소통 수단은
메시지- 한 객체가 다른 객체에게 요청하는 것 = 메시지 전송 → 송신자
- 한 객체가 다른 객체로부터 요청을 받는 것 = 메시지 수신 → 수신자
- 객체가 수신된 메시지를 처리하는 것은
메서드- 클래스 안에 포함된 함수 또는 프로시저를 통해 구현
- 객체에 메세지를 전송 → 메시지에 대응하는 특정 메서드 실행
- 메시지와 메서드의 분리는 객체간 자율성 증진
캡슐화개념과 관련
객체 지향의 본질
- 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법
- 객체 지향은 객체를 지향하는 것
- 클래스의 구조와 메서드가 아닌 객체의 역할, 책입, 협력에 집중해야 한다.