목차
1. 서론
객체지향이란 무엇인가?
=> 이 질문에 대한 자신만의 견해를 가지는 것이 중요하다
=> 그러나, 많은 개발자는 객체지향을 여전히 클래스나 상속을 중심으로 바라본다.
다음 책에서는 총 3가지 관점의 변화를 유도한다.
첫째, 클래스 중심 => 객체 중심 관점
둘째, 객체를 독립적 존재 => 협력적 존재로 바라보는 것
셋째, 객체에게 얼마나 적절한 역할과 책임을 부여하는가
=> 궁극적으로 이 3가지 관점으로 프로그래밍 언어라는 틀에 어떻게 담아내는지가 중요하다
2. 기존의 객체지향 묘사
- 객체지향은 현실세계 사물의 추상화로 묘사되는 경우가 많다.
- 그러나, 실제 현실과 소프트웨어 객체 사이의 연관성은 사실 희미하다.
- 객체지향의 목표는 실세계 모방 보다는 새로운 세계를 창조하는 것이다.
- 그럼에도 현실세계 비유가 자주 등장하는 이유는?
=> 현실세계의 사람들이 악묵적인 약속과 명시적 계약을 기반으로 목표를 달성해나가는 과정
=== 메시지를 주고받으며 공동의 목표를 달성하기 위해 협력하는 객체를 설명하기에 적합하기 때문
3. 객체의 3요소 : 협력, 역할, 책임
1) 협력은 요청과 응답으로 구성된다.
[커피 주문의 과정]
커피주문 커피 제조
손님 ------------------> 캐시어 --------------------> 바리스타
<----------------- <--------------------
커피 완성 커피 완성
커피 주문의 과정으로 보는 협력의 과정
[요청]
-- 손님 => 캐시어 : 커피를 주문한다.
-- 캐시어 => 바리스타 : 주문한 커피를 바리스타에게 제조 요청한다.
[응답]
--캐시어 <= 바리스타 : 커피가 제조되면 캐시어에게 알려준다.
-- 손님 <= 캐시어 : 진동벨로 커피가 준비되었음을 알린다.
- 객체는 자신에게 주어진 역할과 책임을 다하며 적극적으로 협력한다.
2) 역할과 책임
: 역할은 책임을 내포한다. -- 역할은 객체가 협력에서 차지하는 책임이나 의무를 뜻한다.
: 역할 == 관련성 높은 책임의 집합
2-1) 여러 사람이 동일한 역할을 수행할 수 있다.
- 캐시어가 누구더라도 같은 역할을 수행할 수 있는 다른 이를 고용하면 된다.
2-2) 역할을 대체가능성을 의미한다.
- 캐시어가 두명이라면 어떤 사람이 역할을 수행해도 문제가 되지 않는다.
2-3) 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 요청을 받은 사람들은 요청 처리방법을 자유롭게 선택이 가능하다
- 다형성 : 동일 요청에 대해 다른 방식으로 응답가능한 능력
2-4) 한 사람이 동시에 여러 역할을 수행할 수 있다.
- 바리스타가 없다면 캐시어가 주문받기+ 커피제조 까지 할수도 있다.
4. 협력 속에 사는 객체
- 협력 : 객체지향 애플리케이션의 아름다움을 결정
- 객체 : 그 협력이 얼마나 조화를 이루는지 결정하는 것
[객체의 2덕목]
1. 객체는 충분히 협력적이어야 한다.
- 객체는 다른 객체 명령에 복종하는 것이 아니라 응답하는 것 뿐이다.
2. 객체는 충분히 자율적이어야 한다.
- 응답의 방식으로 객체 스스로 판단하고 결정한다
== 객체는 공동의 목표를 달성하기 위해 협력하며 +) 스스로의 판단에 따라 행동하는 자율적 존재
4-1) 객체는 상태와 행동을 함께 지녔다.
-객체는 특정 행동을 하기 위해 필요한 상태도 함께 지녀야 한다.
ex) 상태== member 변수 / 행동== method로 놓는다면
=> 어떤 method 수행을 위해 필요한 member변수라는 상태가 있어야 함
- 객체의 자율성은 외부/내부를 구분하는 것에서 나온다.
-- 사적인 부분은 스스로 관리하고 일체 간섭할 수 없도록 차단해야 한다.(private)
-- 외부에서 접근이 허락된 수단을 통해서만 의사소통해야 한다.(setter/getter)
- 객체의 자율성은 데이터와 프로세스를 묶음에서 나온다.
-- 과거, 전통 개발 방법은 데이터와 프로세스를 엄격히 구분했다.
-- 그러나, 객체지향은 객체 안에 데이터+프로세스를 묶음으로써 자율성을 보장한다.
4-2) 객체는 메시지를 통해 소통한다.
- 객체는 '오직' 메시지를 통해 소통한다.
- 송신자 : 메시지를 전송하는 객체
- 수신자 : 메시지를 받는 객체
4-3) 객체는 메서드 처리 방식의 자율성을 지닌다.
- 메서드 : 객체가 수신된 메시지를 처리하는 방법
- 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현된다.
절차지향 언어 | 객체지향 언어 |
컴파일 시간에 프로시저 호출에 대한 실행코드 결정 => 정적이며 프로그램 흐름이 자유롭지 못함 |
런타임에 메시지에 따라 메서드를 선택할 수 있음 => 객체들 간의 자율성을 증진시킴 => 다형성 : 같은 요청에 대해 다른 처리를 하는 것도 가능 |
=> 결국, 객체지향은 메시지(외부 요청)과 메소드(요청의 처리방식)을 분리하여 자율성을 향상시킴
5. 객체 지향의 본질
1. 객체지향이란
: 시스템을 상호작용하는 자율적 객체들의 공동체로 바라봄
: 객체를 이용해 시스템을 분리
2. 자율적인 객체란
: 상태+ 행위를 지님
: 스스로 자기 자신을 책임지는 객체
3. 객체의 3요소 : 협력 + 역할 + 책임
4. 객체 의사소통 수단 : 메시지
5. 객체의 자율성
- 메시지와 메서드의 분리
- 메시지 처리 방식(메서드)의 자율성
- 객체지향의 본질은 클래스가 아닌 객체이다.
- 클래스는 객체 구현 메커니즘을 뿐, 협력 구조와 책임 식별이 더 중요
즉, 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이 중요하다
'기술 서적 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] ch5. 책임과 메시지 (1) | 2024.03.04 |
---|---|
[객체지향의 사실과 오해] ch4. 역할, 책임, 협력 (0) | 2024.03.01 |
[객체지향의 사실과 오해] ch3. 타입과 추상화 (0) | 2024.01.20 |
[객체지향의 사실과 오해] ch2. 이상한 나라의 객체 / 상태 -행동 -식별자 (0) | 2024.01.17 |