📗 BOOK/객체지향의 사실과 오해

객체지향의 사실과 오해 - 2장 정리

미미누 2022. 2. 24. 01:11

본 글은 스터디 내에서 객체지향의 사실과 오해 - 역할, 책임, 협력 관점에서 본 객체지향을 읽고 정리한 글입니다.


1. 객체지향과 인지 능력

 

객체지향 패러다임은 인간이 인지 가능한 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 출발한다.

객체지향과 현실의 유사성은 여기까지이며, 객체지향 패러다임의 목적은 현실세계를 기반으로 새로운 세계를 창조하는 것이다.

 

2. 객체 그리고 이상한 나라

 

이상한 나라의 앨리스 이야기를 차용해서 객체의 특징을 서술하였다.

 

1. 앨리스는 상태를 가지며 상태는 변경 가능하다.

2. 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다.

행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.

행동의 순서가 결과에 영향을 미친다.

3. 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다.

 

 

3. 객체, 그리고 소프트웨어 나라

 

객체란 식별 가능한 개체 또는 사물이다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.

왜 상태가 필요할까? 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

 

상태와 프로퍼티

모든 객체의 상태는 단순한 값과 객체의 조합으로 표현 가능하다. 객체의 상태를 구성하는 모든 특징을 통틀어

객체의 프로퍼티라고 한다.

 

프로퍼티 값은 시간이 흐름에 따라 변경되기 때문에 동적이다.

객체와 객체 사이의 연결을 링크(link)라고 한다. 객체의 링크를 통해서만 메시지를 주고받을 수 있다.

 

객체를 구성하는 단순한 값을 속성(attribute)라고 한다.

객체의 프로퍼티는 속성과 링크로 표현 가능하다.

객체는 다른 객체의 상태에 직접적으로 접근이 불가하기 때문에, 행동으로 하여금 다른 객체의 상태를 변경한다.

 

4. 상태와 행동

객체의 행동은 상태에 영향을 받는다.

객체의 행동은 상태를 변경시킨다. 

 

5. 협력과 행동

행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.

활동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달 가능하다.

 

6. 상태 캡슐화

객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출되지 않는다. 객체가 외부에 노출하는 것은 행동뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동뿐이다.

객체의 행동을 유발하는 것은 외부로부터 전달된 메시지지만, 객체의 상태를 변경할지 여부는 객체 스스로 결정한다. 객체에게 메시지를 전달하는 외부의 객체는 수신하는 객체의 상태가 변경되는 사실조차 알지 못한다.

 

7. 식별자

객체가 식별 가능하다는 것은 객체를 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다.

이러한 프로퍼티를 식별자라고 한다.

값(value)는 숫자, 문자열, 날짜, 금액 등 변하지 않는 양을 모델링한다.

값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단하다. 

값은 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 갖는데 이 성질을 동등성(equality)라고 한다.

객체는 상태가 변하기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.

 

참조 객체(reference object), 엔터티(entity)는 식별자를 가진 객체를 가리키는 용어이고, 값 객체(value object)는 식별자를 가지지 않는 값을 가리키는 용어이다.

 

8. 기계로서의 객체

객체의 상태를 조회하는 작업을 쿼리(query), 객체의 상태를 변경하는 작업을 명령(command)라고 한다.

객체를 기계로서 바라보는 관점은 상태, 행동, 식별자에 대한 시각적인 이미지를 제공하고 캡슐화와 메시지를 통한 협력 관계를 매우 효과적으로 제공한다.

 

9. 행동이 상태를 결정한다

 

상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다.

1. 캡슐화가 저해된다.

2. 객체를 협력자가 아닌 고립된 섬으로 만든다.

3. 객체의 재사용성이 저해된다.

책임-주도 설계(RDD)는 협력이라는 문맥 안에서 객체의 행동을 생각하도록 도움으로써 응집도 높고 재사용 가능한 객체를 만들 수 있게 한다.

 

10. 은유와 객체

의인화: 현실의 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징

 

현실 세계인 도메인에서 사용되는 이름을 객체에게 부여하라고 가이드하는 이유?

-> 현실 객체의 은유를 효과적으로 사용하면 소프트웨어 객체의 표현적 차이를 줄일 수 있음.