객체를 발견하고 창조하는 것은 지식과 행동을 구조화 하는 문제이다 (by. 레베카 위프스브록)
인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다.
많은 사람들이 객체지향을 직관적이고 이해하기 쉽다고 하는 이유는
객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 기본적인 인지능력에 기반을 두고 있기 때문이다.
하지만 인간은 물리적인 한계를 넘어 추상적인 사물까지도 객체로 인식할 수 있다.
(주문, 통장의 이체 등 손이나 눈에 안보이는 추상적인 것들)
저자는 이 장의 설명을 위해서 "이상한 나라의 앨리스" 책의 앨리스를 예로 들고 있다.
문을 지나 정원을 가기 위해서 앨리스는 키를 조정해야 한다.
병속의 액체나 케이크를 먹는 것으로 키를 조정할 수 있다고 하며
또, 버섯으로 몸의 크기도 조절할 수 있다고 한다.
요약해서 앨리스는
- 변경 가능한 유동적 상태를 가지며
- 행동을 통해서 상태를 변경할 수 있으며
- 어떤 상태이든 앨리스는 앨리스 그 자체이다.
앨리스를 통해서 우리는 객체의 특성을 상태, 행동, 식별자 를 지닌 실체로 볼수 있다는 것을 알수 있다.
상태
-
인간은 행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안 했다.
-
상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 예측과 설명이
가능하며 과거에 얽매이지 않고 현재를 기반으로 객체를 이해할 수 있다.
-
근본적으로 세상의 복잡성을 완화하고 인지과부하를 줄여주는 역학을 한다.
(추상적인것에 대한 설명인가??)
앨리스를 예로 들자면, 앨리스의 '키와 위치'는 객체가 아니며 음료와 케이크의 '양' 그리고 문의 열려있는지 닫혀 있는지는 객체가 아니다.
이러한 것들은 객체의 특성을 표현하는데 사용된다. 즉 객체의 상태를 표현 해줄 수 있다.
프로퍼티(property) : 객체의 상태를 구성하는 모든 특징, 정적이다.
프로퍼티 값(property value) : 객체 상태의 값, 동적이다.
행동
상태와 행동
-
객체가 취하는 행동은 객체 자신의 상태를 변경 시킬수 있다.
-
객체의 상태가 변경된다는 것은 행동으로 부수효과를 초래한다는 것을 의미한다.
-
객체의 상호작용 관점에서 행동은 다른 객체의 상태를 어떤 방식으로 의존하는지 변경시키는 등의 일을 할수 있다.
협력과 행동
-
객체는 다른 객체와 상호작용 하며 협력을 한다.
-
적절한 메시지와 행동으로 협력을 통해 상태를 변경한다.
상태 캡슐화
-
객체 A가 객체 B의 값을 직접적으로 변경 시킬수 없다.
단지, 메시지를 통해 변경에 대해 알려줄수 있다.
이러한점이 현실과 다른 점으로 볼 수 있다.
-
객체는 상태를 외부로 노출하지 않으며, 행동만이 노출된다. 객체 접근도 유일한 방법은 행동 뿐이다.
식별자
-
객체를 구별 할수 있는 특정한 프로퍼티
요약
행동이 상태를 결정한다.
협력에 참여하는 객체들에게 가장 중요한 것은 상태가 아니라 행동이다.
즉, 애플리케이션에서 어떤 행동을 하는지가 객체를 결정할 수 있으며 그 과정 중에 행동으로 적합한지 판단하여야 한다.
"책임-주도 설계(Responsibilty-Driven Design, RDD)" 는 협력속에 객체의 행동을 생각 하도록 도움으로써
응집도 높고 재사용이 가능한 객체를 만들수 있도록 도와준다.
은유
은유는 표현적 차이, 의미적 차이라는 논점과 관련성이 깊다.
여기서 차이는 현실 객체와 소프트웨어 객체간의 표현 사이의 차이를 의미한다.
은유관계에 있는 소프트웨어 객체 이름을 현실 객체 이름으로 사용을 하면 표현적 차이를 줄여줄 수 있다.
우리의 목적은 현실 모방이 아니며 어떠한 제약이나 구속도 없다.
현실속의 객체를 묘사해라.
소프트웨어의 앨리스 객체는 키가 2미터가 넘든 몸무게가 100kg가 넘든 상관 없다.
'IT' 카테고리의 다른 글
통신사별 DNS IP 리스트 (구글, SKT, KT, LG) (0) | 2020.05.06 |
---|---|
batch 프로그램으로 host 변경하기 (0) | 2019.10.25 |
개발에 있어서... (0) | 2019.10.23 |
GitLab - SVN 마이그레이션 및 Clone (0) | 2019.10.23 |
[토끼책] 객체지향의 사실과 오해 1장 - 협력하는 객체들의 공동체 (0) | 2019.10.22 |