코드로 우주평화

행동이 상태를 결정한다. 본문

나는 이렇게 본다/객체지향의 사실과 오해

행동이 상태를 결정한다.

daco2020 2022. 2. 10. 20:56

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다.설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다.

 

 

제목 : 객체지향의 사실과 오해

저자 : 조영호

범위 : 02 이상한 나라의 객체

 

 

 

요약 정리

  • 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.
  • 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
  • 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓과 같은 단순한 값들은 객체가 아니다.
  • 단순한 값들은 다른 객체의 상태를 표현하기 위해 사용한다.
  • 객체의 상태를 구성하는 모든 특징을 객체의 프로퍼티라고 한다.
    • 정적인 프로퍼티 사람이라면 키, 성별, 체력 등이 될 수 있고 변경되지 않고 고정되기 때문에 ‘정적’이다. (cf. key)
    • 동적인 프로퍼티 값(value)은 시간이 흐름에 따라 변경되기 때문에 ‘동적’이다. (cf. value)
  • 객체와 객체 사이의 의미 있는 연결을 링크라고 한다.
    • 링크는 객체가 다른 객체를 참조할 수 있다는 것을 의미하며 일반적으로 다른 객체의 식별자를 알고 있는 것으로 표현한다.
  • 객체를 구성하는 단순한 값은 속성(attribute)이라고 한다.
  • 프로퍼티는 단순한 값인 속성과 다른 객체를 가리키는 링크라는 두 가지 종류의 조합으로 표현할 수 있다.
  • 상태'는 특정 시점에 객체가 가지고 있는 정보의 집합이다.

 

  • 객체지향의 기본 사상은 상태와 상태를 조작하기 위한 행동을 하나의 단위로 묶는 것이다.
  • 객체는 스스로의 행동에 의해서만 상태가 변경되며 이를 객체의 자율성이라 한다. 다른 객체에게 협력하더라도 자신의 상태는 자신의 행동으로만 변경할 수 있다.
  • 상태에 영향을 받아 행동을 하게되고 행동의 결과로 상태가 변경된다. 배가 고파서(상태) 밥을 먹고(행동) 밥을 먹어서 배가 부르다.(결과 - 상태의 변경)
    • 목표가 있고 목표를 달성하기 위해 상태를 변경해야하고 상태를 변경하기위해 행동을하고 행동을 함으로써 상태가 변경되고 상태가 변경되어 목표를 달성하게 된다.
  • 객체가 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것이다.
  • 객체의 행동은 두 가지 관점의 부수효과를 명확히 서술해야 한다.
    • 객체 자신의 상태 변경
    • 행동 내에서 협력하는 다른 객체에 대한 메시지 전송
  • 행동이란 외부의 메시지에 응답하기 위한 동작이다.
  • 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달한다.
  • 행동은 다른 객체와의 협력이므로 행동은 외부에 가시적이어야 한다.
  • 반대로 상태의 변경은 외부에서 전혀 알지 못한다. 이를 캡슐화라고 한다.

 

  • 식별자란 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 말한다.
  • 값과 객체의 가장 큰 차이점은 식별자의 존재 여부다.
  • 값의 상태는 변하지 않기 때문에 불변 상태라고 말한다.
  • 객체는 시간에 따라 변경되는 상태를 포함하며 행동을 통해 상태를 변경한다. 따라서 가변 상태를 가진다. 타입이 같은 두 객체의 상태가 완전히 갖더라도 두 객체는 별개의 객체이다. (쌍둥이가 별개의 사람으로 여겨지듯이)
  • 식별자를 가지고 두 객체가 같은지 판단하는 것을 동일성이라고 한다.
  • 객체를 지칭하는 용어 → 참조 객체, 엔티티
  • 개발자들의 주된 업무는 객체의 상태를 조회하고 객체의 상태를 변경하는 것이다.
  • 상태를 조회하는 작업을 쿼리, 상태를 변경하는 작업을 명령(command)라고 한다.

 

  • 훌륭한 객체는 행동에 초점을 맞춘다.
  • 객체는 다른 객체와 협력하기 위해 존재한다.
  • 객체가 적합한지를 결정하는 것은 그 객체의 상태가 아니라 행동이다.
  • 객체지향 설계 순서
    • 필요한 협력을 생각하고
    • 협력에 필요한 행동을 생각하고
    • 행동을 수행할 객체와 상태를 선택한다.
  • 행동은 결국 협력하며 완수해야 하는 책임을 의미한다. 이를 책임-주도 설계 RDD 라고 부른다. 응집도 높고 재사용 가능한 객체를 만들 수 있게 한다.

 

  • 객체는 현실을 모방하거나 추상화한 것이 아니다. 현실과 전혀 다른 새로운 세계를 창조하는 것이다.
  • 현실을 무시하고 자유롭게 새로운 세계를 창조하길 바란다.

 

 

 

하고 싶은 말

  • 링크가 어떻게 생겼는지 궁금하다.
  • 동등성, 동일성에 대해 추가 학습이 필요하다.
  • 파이썬에서 객체의 식별자는 어떻게 알 수 있는가?