객체는 협력하기 위해 존재한다

MinHwi·2022년 11월 18일
0
  • 공부 내용 : 객체지향의 사실과 오해 2장
  • 공부 기간 : 2022년 11월 15일 화요일

질문

  1. 객체는 무엇인가?
  2. 객체는 무엇으로 구성되며, 각 구성 요소는 왜 필요한가?
  3. 객체는 어떻게 협력에 참여하는가?
  4. 객체를 왜 캡슐화하는가?
  5. 객체 설계에 있어 중요한 것은 무엇인가?
  6. 왜 객체 지향은 현실 세계의 모방이 아닌가?

기억하고 싶은 것

객체는 협력하기 위해 존재한다. 자율적인 책임을 가진 객체가 협력에 참여할 수 있는 유일한 방법은 행동이다. 객체지향 설계에서는 어떤 책임과 이를 수행할 행동이 필요한지 정의한 후 상태를 결정해야 한다.

1. 객체는 무엇인가?

객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 예를 들어 앨리스(사람), 음료(사물)

2. 객체는 무엇으로 구성되며, 각 구성 요소는 왜 필요한가?

객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.

  • 상태 : 행동의 결과는 객체에게 과거에 어떤 행동이 일어났느냐에 의존한다. 자판기에 충분한 금액을 투입하기 전에는 원하는 음료를 선택할 수 없다. 모든 과거의 이력을 저장하는 대신 상태를 기록해 효율적으로 행동의 결과를 예측할 수 있다. 상태에는 단순 값과 다른 객체를 참조하는 링크가 있다.

  • 행동 : 행동의 결과는 상태에 영향을 받으며, 객체의 행동은 상태를 변경시킨다. 객체는 자율적인 책임을 가지므로 자신의 상태는 자신만이 직접 변경할 수 있으며 다른 객체와 협력을 참여할 때 다른 객체의 상태 변화를 간접적으로 요청할 수 있다. 이 두 가지 효과를 행동이 담당한다.

  • 식별자 : 객체의 상태와 같은 단순한 값은 동등성을 비교할 수 있다. 반면 객체는 모든 상태 값이 같더라도 다른 객체이다. (일란성 쌍둥이 처럼) 객체는 동일성 비교를 위한 식별자를 가진다.

3. 객체는 어떻게 협력에 참여하는가?

객체의 행동은 객체가 협력에 참여하는 유일한 방법이다. 객체지향 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 따라서 다른 객체의 상태 변화를 요청하려면, 메시지를 전송해서 다른 객체의 행동이 스스로 동작하도록 만들어야 한다. 객체의 행동을 유발한 것은 외부로부터 전달된 메시지지만 객체의 상태를 변경할지 여부는 객체 스스로 결정한다. 사실 객체에게 메시지를 전달하는 외부의 객체는 메시지를 수신하는 객체의 상태가 변경된다는 사실조차 알지 못한다.

4. 객체를 왜 캡슐화하는가?

상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 결과적으로 객체의 자율성을 높인다. 자율적인 객체는 스스로 판단하고 스스로 결정하므로 객체의 자율성이 높아질 수록 객체의 지능도 높아진다. 협력에 참여하는 객체들의 지능이 높아질수록 협력은 유연하고 간결해진다.

5. 객체 설계에 있어 중요한 것은 무엇인가?

협력에 참여하는 훌륭한 객체 시민을 양성하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것이다. 객체는 다른 객체와 협력하기 위해 존재한다. 객체의 행동은 객체가 협력에 참여하는 유일한 방법이다. 따라서 객체가 적합한지 결정하는 것은 그 객체의 상태가 아니라 행동이다.

객체지향 설계는 애플리케이션에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행된다. 행동을 결정한 후에야 행동에 필요한 정보가 무엇인지를 고려하게 되며 이 과정에서 필요한 상태가 결정된다. 따라서 행동의 결정하고 그 후에 행동에 적절한 상태를 선택하게 된다.

결국 어떤 책임이 필요한가를 결정하는 과정이 전체 설계를 주도해야 한다. RDD(Responsibility Driven Design)는 협력이라는 문맥 안에서 객체의 행동을 생각하도록 도움으로써 응집도 높고 재사용 가능한 객체를 만들 수 있게 한다.

6. 왜 객체 지향은 현실 세계의 모방이 아닌가?

현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다. 전화기는 스스로 통화 버튼을 누를 수 없으며 계좌는 스스로 금액을 이체할 수 없다. 현실의 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징을 의인화라고 한다.

그럼에도 현실 세계의 모방이라는 도시 전설이 생겨난 것은 현실 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문이다. 이러한 은유 과계에 있는 실제 객체의 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여 소프트웨어의 구조를 쉽게 예측할 수 있다.

profile
딩가딩가 백엔드 개발자

0개의 댓글