"객체지향의 사실과 오해" 책 내용을 체화하기 위해 읽으며 기록하는 노트이다.
객체란 물리적 사물뿐만이 아닌 '주문'같은 추상적인 개념 또한 포함한다.
객체지향은 현실 세계 모방이 아닌 새로운 세계를 창조하는 것이다.
상태를 결정하는 것은 행동이지만, 행동의 결과를 결정하는 것은 상태이다.
행동의 결과는 상태에 의존적이다.
식별 가능한 개체 또는 사물로, 사물일 수도 있고 추상적인 개념일 수도 있다.
객체는 구별가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.
소프트웨어 안 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
과거에 한 행동으로 현재 행동의 결과를 판단할 수 있으나,
이를 모두 기억하고 판단하기에는 번거로우니 상태라는 개념을 고안해내었다.
ex) 차를 운전하려면 자동차의 시동이 걸려있는 상태여야만 한다.
숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓 같은 단순한 값들은 객체가 아니다.
이들은 객체의 특성을 표현한다.
객체의 상태를 표현할 때 또 다른 객체를 사용해서 표현하기도 한다.
객체는 객체의 상태를 구성하는 프로퍼티와 객체의 조합으로 표현한다.
프로퍼티는 정적이지만 프로퍼티 값은 동적이다.
링크
객체와 객체 사이의 의미 있는 연결
링크가 존재해야만 요청(메시지)을 보내고 받을 수 있으며, 연결된 객체를 참조할 수 있다.
이는 한 객체가 다른 객체의 식별자를 알고 있음을 말한다.
프로퍼티는 단순한 값인 속성과 링크의 조합으로 표현된다.
상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
자율적인 객체는 스스로 자신의 상태를 책임져야 한다.
객체 자신의 상태는 행동을 통해서만 변한다.
행동은 상호작용이 현재의 상태에 어떤 방식으로 의존하는지,
상호작용이 어떻게 현재 상태를 변경시키는지의 관점에서 볼 수 있다.
객체는 메시지만을 통해 다른 객체와 협력한다.
행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
객체는 자율성을 높이기 위해 상태를 캡슐 안에 감추고 외부에 노출시키지 않는다.
메시지를 전달하는 다른 객체도 상대 객체의 상태 변화를 알 수 없다.
모든 객체를 구별할 수 있는 특정한 프로퍼티
객체가 아닌 단순한 값은 식별자를 가지지 않는다.
상태를 이용해 두 값이 같은지를 판단하는 성질
상태를 이용해 동등성을 판단할 수 있는 것은 값은 상태가 변하지 않기 때문이다.
식별자를 기반으로 객체가 같은지를 판단하는 성질
상태는 시간이 지나면 변하기 때문의 동일성의 기준이 될 수 없다.
식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다. 객체는 상태가 변경될 수 있기 떄문에 식별자을 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.
객체는 다른 객체와 협력하기 위해 존재하는데, 행동이 그 유일한 방법이다.
객체 지향 설계에서는 필요한 협력을 생각하고 협력에 참여에 필요한 행동을
생각한 후 수행할 객체를 선택하는 방식으로 수행된다. 행동을 결정한 후 행동에 필요한 상태를 결정한다.
현실의 객체는 수동적인 존재이지만 소프트웨어 객체는 능동적인 존재이다.
현실의 객체보다 더 많은 일을 할 수 있다.
모방이나 추상화가 아닌 실제로 적용되지 않는 한 가지 개념을 이용해
다른 개념을 서술하는 은유로 객체지향을 설명한다.
현실의 객체 의미 일부가 소프트웨어 객체로 전달된다.