책 읽으며 정리한 내용
1. 협력하는 객체들의 공동체
아직도 생각난다. 예전에 정보처리기사 필기 시험을 보던 중, 문제 중에서 객체지향 언어가 아닌 것을 고르라는 문제가 있었다. (그때 프로그래밍 배운지 얼마 안되서 아는게 없었음) 자신있게 자바스크립트를 골랐다. 그리고 오답이라는걸 나중에 알았다.당시 내 생각은 "아니.. 자바스크립트는 클래스도 없는데 왜 객체지향언어야?" 였고, 객체지향하면 클래스지향이라는 고정관념이 박혀있었다. 그게 한참 잘못됐다는 생각은 이 책의 1장을 읽으면서 박살낼 수 있었다.
클래스의 구조와 메서드가 아닌 객체의 "역할, 책임, 협력"에 집중해야 한다.
2. 이상한 나라의 객체
객체?
- 객체란 식별 가능한 개체, 사물이다.
- 객체는 구체적인 사물일 수도, 추상적인 개념일 수도 있다.
- 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
1) 상태
모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다. 이때 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티 (property)라고 한다.
일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 정적이다. 반면 프로퍼티 값 (property value)은 시간의 흐름에 따라 변경되기 때문에 동적이다.
링크(link) : 객체와 객체 사이의 의미 있는 연결을 말함
메시지(message) : 객체의 링크를 통해서만 주고 받을 수 있음
속성(attribute) : 객체 간의 선으로 표현되는 링크와 달리 객체를 구성하는 단순한 값
상태?
- 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다.
- 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다.
- 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
2) 행동
행동?
- 행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.
- 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.
- 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
상태 캡슐화에 대해서
- 캡슐화 : 객체가 외부에 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 없도록 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는 것을 말함
- 객체의 행동을 유발하는 것은 외부로부터 전달된 메시지지만, 객체의 상태를 변경할지 여부는 객체 스스로 결정한다.
상태를 캡슐화 해야 하는 이유
- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 객체의 자율성을 높이고, 객체의 지능을 높인다.
- 협력에 참여하는 객체들의 지능이 높아질수록 협력은 유연하고 간결해진다.
3) 식별자
식별자?
- 식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다.
- 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다.
- 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.
참조 객체 또는 엔티티는 식별자를 지닌 전통적인 의미의 객체를 가리키는 용어다.
값 객체는 식별자를 가지지 않는 값을 가리키는 용어다.
☞ 개인적으로 버트란드 마이어의 기계 은유를 통해서 앞에서 배운 개념들을 설명하는 부분이 머리 속에 잘 들어 왔다.
객체지향 설계?
- 어플리케이션에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행된다.
- 객체지향은 현실의 모습을 조금 참조해서 다른 새로운 세계를 창조하는 과정이라고 봐야 한다.
이를 좀 더 잘 설명하기 위해서 책에서는 '은유'라는 개념을 사용해서 설명함
(전통적으로는 현실의 모방이라고 보는 관점이 널리 퍼져 있음)
'시야 넓히기' 카테고리의 다른 글
쉬운 이해를 위한 컴퓨터부품 노예비유법 (2) | 2022.08.02 |
---|---|
엠제이 드마코의 부의 추월차선 (0) | 2020.05.11 |
댓글