[객사오] Chapter 2

앨리스 객체

  • 문을 통과하기에 적당한 상태로 키(상태)를 변화시킴
  • 앨리스의 행동에 따라 앨리스의 상태가 변화
    • 행동의 결과를 결정하는 것이 상태
    • 행동의 결과는 상태에 의존적
  • 어떤 행동의 성공 여부는 이전에 어떤 행동들이 발생했는지에 영향을 받는다.
  • 앨리스의 상태가 어떻든 앨리스는 유일한 존재로 식별 가능

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

  • 하나의 개별적인 실체로 식별 가능한 사물은 모두 객체가 될 수 있다.
  • 객체는 상태, 행동, 식별자를 지닌 실체

상태와 프로퍼티

  • 상태: 과거의 이력 없이 행동의 결과를 쉽게 예측할 수 있게 한다.
  • 프로퍼티: 객체의 상태를 구성하는 모든 특징
    • 프로퍼티는 변경되지 않고 고정 → 정적
    • 프로퍼티 값은 변경될 수 있는 것 → 동적
  • 프로퍼티의 종류
    • 링크: 객체와 객체 사이 의미있는 연결
      • 객체간 요청은 링크를 통해서만 가능하다.
      • 객체가 다른 객체를 참조할 수 있음을 의미 = 다른 객체의 식별자를 알고 있음
    • 속성: 객체를 구성하는 단순한 값

상태와 행동

  • 부수 효과: 객체의 행동에 의해 객체의 상태가 변경되는 것
    • 행동은 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다.
  • 상태와 행동의 관계
    • 객체의 행동은 상태에 영향을 받는다.
    • 객체의 행동은 상태를 변경시킨다.
  • 상태의 개념으로 서술한 행동
    • 상호작용이 현재의 상태에 어떤 방식으로 의존하는가
    • 상호작용이 어떻게 현재의 상태를 변경시키는가

협력과 행동

  • 객체는 다른 객체와 메시지를 통해서만 의사소통할 수 있다.
  • 객체는 수신된 메시지에 따라 적절히 행동하며 협력에 참여 → 결과로 상태 변경
  • 객체의 행동으로 발생하는 결과
    • 객체 자신의 상태 변경
    • 행동 내에서 협력하는 다른 객체에 대한 메시지 전송

상태 캡슐화

  • 앨리스의 키(상태)를 변화시키는 것은 앨리스 자신
    • 그렇다면 음료의 양(상태)를 변화시키는 것도 음료 자신이어야 한다!
    • 앨리스의 키를 줄이려 음료를 마시는 상황 → 앨리스 객체에서 음료 객체에 메시지 전송 필요
  • 메시지 송신자는 메시지 수신자의 상태 변경에 대해서는 알지 못한다. → 캡슐화

캡슐화

  • 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
  • 객체가 외부에 노출하는 것은 행동 뿐
  • 객체의 상태를 변경할지 여부는 객체 스스로 결정 → 외부의 메시지는 행동을 유발할 뿐..
  • 수신자가 자신의 상태를 변경하지 않아도 송신자가 간섭할 수 없다.

식별자

  • 객체를 서로 구별할 수 있는 특정 프로퍼티가 객체 안에 존재하는 것
    • 모든 객체는 식별자를 가진다.
    • 값과 객체의 가장 큰 차이점
  • 값: 숫자, 문자열, 날짜, 금액 등 변하지 않는 양을 모델링
    • 불변 상태를 가진다.
    • 값은 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단
      • 상태를 이용해 같은지 판단한다. → 동등성 판단
      • 구별하기 위한 별도의 식별자가 필요 없다.
  • 객체
    • 가변 상태 - 행동에 따라 상태가 변한다.
    • 타입이 같은 두 객체의 상태가 똑같아도 별개로 다루어야 함
    • 식별자를 기반으로 객체가 같은지 판단해야 한다. → 동일성
    • 객체의 상태는 변하는 값이므로 도 객체의 동일성을 판단하기 위해서는 식별자가 필요하다.

행동이 상태를 결정한다

  • 상태를 중심으로 객체를 바라보는 것은 설계에 나쁜 영향을 끼친다.
    1. 캡슐화 저해
      • 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되어버릴 확률이 높아진다.
    2. 객체를 협력자가 아닌 고립된 섬으로 만든다.
      • 문맥에서 벗어난 채 객체를 설계하도록해 협력에 적합하지 못한 객체를 창조하게 된다.
    3. 객체의 재사용성이 저하된다.
      • 객체의 재사용성은 다양한 협력에 참여할 수 있는 능력
      • 상태에 초점을 맞춤 객체는 다양한 협력에 참여하기 어렵기 때문에 재사용성이 저하된다.
  • 상태가 아닌 행동에 초점을 맞추어야 한다.
    • 우리가 애플리케이션 안에서 어떤 행동을 원하느냐가 어떤 객체가 적합한지 결정
    • 객체의 적합성을 결정하는 것은 상태가 아닌 객체의 행동
  • 행동을 결정한 후 행동에 필요한 정보와 필요한 상태를 결정
  • 책임 주도 설계 : 어떤 책임이 필요한가를 결정하는 과정이 전체 설계를 주도하는 것
    • 협력이라는 문맥 안에서 객체의 행동을 생각하도록 돕는다.

은유와 객체

  • 객체지향이란 현실 세계의 모방
    • 실제 세계와 소프트웨어에 구현된 객체는 전혀 다름
    • 모방과 추상화라는 개념만으로는 현실 객체와 소프트웨어 객체의 관계를 설명하지 못한다.

의인화

  • 현실 속에서의 수동적인 존재들이 소프트웨어 객체로 구현될 경우 능동적으로 변함
    • 현실 객체가 가지지 못한 추가적인 능력을 보유하게 한다.
  • 소프트웨어의 객체는 현실의 객체보다 더 많은 일을 할 수 있다는 특징

    의인화

은유

  • 현실 세계와 객체지향 세계 사이의 관계를 좀 더 정확하게 설명할 수 있는 단어
  • 실제로는 적용되지 않는 한 가지 개념을 이용해 다른 개념을 서술하는 대화의 한 형태
  • 예를 들어 전화기 객체를 만든다?

    → 객체가 전화를 걸 수 있다는 사실을 쉽게 이해할 수 있음

  • 은유 관계에 있는 실제 객체 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여 소프트웨어의 구조를 쉽게 예측할 수 있다.

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus