1. 6달 전

    <책 리뷰> 객체지향의 사실과 오해

    책 리뷰, 객체지향의 사실과 오해 조영호 지음 | 위키북스 | 2015년 06월 17일 출간

  2. 6달 전

    <책 리뷰> 소프트웨어 장인

    책 리뷰, 소프트웨어 장인 산드로 만쿠소 저 / 권오인 역 | 길벗 | 2015년 09월 25일 출판

Tamm자바스크립트 웹 개발 환경을 좋아하고 사람들에게 재미를 주는 것에 관심이 많은 개발자 입니다.

<책 리뷰> 객체지향의 사실과 오해

책 리뷰, 객체지향의 사실과 오해 조영호 지음 | 위키북스 | 2015년 06월 17일 출간

featured image thumbnail for post <책 리뷰> 객체지향의 사실과 오해

대부분의 사람들이 객체지향이라는 설명을 들을 때 이런 설명을 듣게 된다.

"객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"

실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적잡하지만 유연하고 실용적인 관점에서 객체지향을 분석, 설계하는 것을 설명하기에는 적합하지 않다. 왜냐하면 실세계와 소프트웨어 객체의 연관성은 깊지 않기 때문이다.

예로 실셰게의 방화벽은 불의 확산을 막지만, 컴퓨터 세계에서 방화벽은 네트워크의 침입을 막는 개념으로 사용한다. "막는다"라는 본질은 통한다고 할 수 있어도, 물리적인 제한이 있는 실세계의 방화벽과 컴퓨터 세계에서 작동하는 방화벽은 크게 다르다. 이런 방화벽에 대한 차이는 개와 고양이의 차이 보다도 크다. (실세계의 방화벽과 컴퓨터의 방화벽 사이의 공통점 보다 개와 고양이의 공통점이 더 많다.)

객체 공동체 안에서 살고 있는 성실한 객체 시민은 자신에게 주어진 역할과 책임을 다하는 동시에 시스템의 더 큰 목적을 이루기 위해 다른 객체와도 적극적으로 협력한다.

객체지향의 설계라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다.

객체는 충분히 '협력적'이어야 한다. 특히, 모든 것을 스스로 처리하려고 하는 전지전능한 객체는 내부적인 복잡도에 의 해 자멸하고 만다.

객체는 충분히 '자율적'이어야 한다. 즉, 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로 통제하여 행동한다.

  • 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.

객체의 상태

상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.

객체의 행동

행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.

  • 객체의 행동은 상태에 영향을 받는다.
  • 객체의 행동은 상태를 변경 시킨다.

행동이 상태를 결정한다.

  1. 상태를 먼저 결정할 경우 캡슐화가 저해된다.
  2. 객체를 협력자가 아닌 고립된 섬으로 만든다. 객체는 다른 객체들과 협력할 때 의미가 있다.
  3. 객체의 재사용성이 저하된다. 객체의 재사용성은 다양한 협력에 참여할 수 있는 능력에서 나온다.
  • 크레이그 라만 - "객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에 할당하는 것"

객체지향의 핵심은 클래스를 어떻게 구현할 것인가가 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.

메시지와 메서드 객체지향 프로그래밍에서 행동은 수행할 책임을 지닌 객체에게 전송된 메시지에 의해 시작된다. 메시지는 행동에 대한 요청을 표현하고, 요청을 수행하는 데 필요한 추가적인 정보를 인자를 통해 전달한다. 수신자는 메시지를 수신하는 객체를 가리킨다. 수신자가 메시지를 받아들인다는 것은 해당 행동을 수행할 책임을 받아들인다는 것을 의미한다. 객체는 메시지에 대한 응답으로 요청을 만족하기 위한 어떤 메서드를 수행할 것이다.