Chapter2 이상한 나라의 객체
1. 객체지향과 인지 능력
객체지향 페러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 출발한다.
객체지향 패러다임의 목적은 현실 세계의 모방이 아니라 새로운 세계를 창조하는 것이기 때문에 소프트웨어 세계에 살아가는 객체는 현실 세계에 존재하는 객체와는 전혀 다른 모습을 보이는 것이 일반적이다.
2. 객체, 그리고 이상한 나라
3. 객체, 그리고 소프트웨어 나라
객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
상태
행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안했다.
상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있다.
상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.
객체의 상태를 구성하는 모든 특징을 통틀어 객체의
프로퍼티(property)
라고 한다. 일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 정적이다.프로퍼티 값(property value)
은 시간이 흐름에 따라 변경되기 때문에 동적이다.객체와 객체 사이의 의미 있는 연결을
링크(link)
라고 한다. 객체와 객체 사이에는 링크가 존재해야만 요청(메시지)을 보내고 받을 수 있다.프로퍼티는 속성과 연관관계의 두 가지 종류로 구분된다. 연관관계는 정적인 관계를 의미하며 링크는 연관관계의 인스턴스이다.
객체지향의 세계에서 객체는 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 스스로 자신의 상태를 책임져야 한다.
객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지한다.
상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
행동
객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이
부수 효과(side effect)
를 초래한다는 것을 의미한다.객체의 행동은 상태에 영향을 받고 상태를 변경시킨다.
객체의 행동은 객체가 협력에 참여할 수 있는 유일한 방법이다.
객체가 다른 객체와 메시지를 통해서만 의사소통할 수 있다는 것을 기억하라.
객체는 협력에 참여하는 과정에서 자기 자신의 상태뿐만 아니라 다른 객체의 상태 변경을 유발할 수도 있다.
객체는 상태를
캡슐
안에 감춰둔 채 외부로 노출하지 않는다. 객체가 외부에 노출하나는 것은행동
뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시행동
뿐이다.객체의 행동을 유발하는 것은 외부로부터 전달된 메시지지만 객체의 상태를 변경할지 여부는 객체 스스로 결정한다.
상태를 외부에 노출시키지 않고 행동을 경계로
캡슐화
하는 것에 대한 이점객체의 자율성을 높인다.
자율성을 가진 객체는 스스로 판단하고 스스로 결정하기 때문에 객체의 자율성이 높아질수록 객체의 지능도 높아진다.
협력에 참여하는 객체들의 지능이 높아질수록 협력은 유연하고 간결해진다.
행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
식별자
객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다. 이 프로퍼티를 식별자라고 한다.
값과 객체의 가장 큰 차이점은 값은 식별자를 가지지 않지만 객체는 식별자를 가진다는 점이다.
값
값은 숫자, 문자, 날짜, 시간, 금액 등 상태가 변하지 않는
불변 상태
를 가진다.값이 같은지 여부는 상태가 같은지를 이용해 판단한다. 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을
동등성(equality)
이라고 한다.
객체
객체는 시간에 따라 변경되는 상태를 포함하며, 행동을 통해 상태를 변경한다. 따라서 객체는
가변 상태
를 가진다고 말한다.식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을
동일성(identidcal)
이라고 한다.
참조 객체(reference object)
또는엔티티(entity)
는 식별자를 지닌 전통적인 의미의 객체를 가리키는 용어이고값 객체(value object)
는 식별자를 가지지 않는 값을 가리키는 용어이다.
식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.
4. 기계로서의 객체
5. 행동이 상태를 결정한다.
상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다.
상태를 먼저 결정할 경우 캡슐화가 저해된다.
객체를 협력자가 아닌 고립된 섬으로 만든다.
객체의 재사용성이 저하된다.
협력에 참여하는 훌륭한 객체 시민을 양성하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것이다.
객체의 행동은 객체가 협력에 참여하는 유일한 방법이다. 따라서 객체가 적합한지를 결정하는 것은 그 객체의 상태가 아니라 행동이다.
객체지향 설계는 어플리케이션에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행한다.
행동을 결정한 후에야 행동에 필요한 정보가 무엇인지를 고려하게 되며 이 과정에서 필요한 상태가 결정된다. 따라서 먼저 객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하게 된다.
6. 은유와 객체
두 번째 도시전설
너무 오랫동안 사람들의 뇌리에 뿌리 깊게 박혀 있었던 탓에 아무도 문제라고 제기하지 않았던 것은 '객체지향이란 현실 세계의 모방'이라는 것이다.
객체지향 세계는 현실 세계의 단순한 모방이 아니다. 소프트웨어 안에 구현된 상품 객체는 실제 세계의 상품과는 전혀 다른 양상을 띤다.
의인화
현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다.
소프트웨어 안에 창조하는 객체에게 현실 세계의 객체와는 전혀 다른 특징을 부여하는 것이 일반적이다.
객체지향 세계를 구축할 때 현실에서 가져온 객체들은 현실 속에서는 할 수 없는 어떤 일이라도 할 수 있는 전지전능한 존재가 된다.
소프트웨어 안에 구축되는 객체지향 세계는 현실을 모방하는 것이 아니다. 현실의 모습을 조금 참조할 뿐 궁긍적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것이다.
은유
현실 속의 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내의 객체는 현실 속의 객체에 대한 은유다.
객체의 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여 소프트웨어의 구조를 쉽게 예측할 수 있다.
소프트웨어 객체에 대한 현실 객체의 은유를 효과적으로 사용할 경우 표현적 차이를 줄일 수 있으며, 이해하기 쉽고 유지보수가 용이한 소프트웨어를 만들 수 있다.
이상한 나라를 창조하라
객체지향 설계자로서 우리의 목적은 현실을 모방하는 것이 아니다. 단지 이상한 나라를 창조하기만 하면 된다.
7. Conclusion
이번 장에서는 객체의 상태, 행동, 식별자에 대해 배웠다. 개념적인 설명이라 일고 이해하는 데에는 큰 부담이 없었다. 하지만 식별자에 대해서는 아직 정확한 감이 잡히지 않는다. 많은 경험을 통해 식별자에 대해 체감을 해봐야 겠다. 또한 이번 장에서 가장 중요한 부분은
행동이 상태를 결정한다.
라고 생각한다. 지금까지 클래스를 사용하면서 항상 난 클래스의 필드를 우선적으로 생각을 하였다. 필드 즉, 상태를 기준으로 여러 메서드를 만들었다. 이러한 방법이 아니라 행동(메서드)을 먼저 생각한 후 행동에 필요한 상태를 정의해야겠다고 생각했다. 또한 그 전에 먼저 선행되어야 할 작업은 바로 객체간의 협력이다. 숲을 먼저 보고 나무를 보도록 노력하자. 자율적인 객체 시민들이 살 수 있는 객체지향의 이상한 나라를 만들어보자.
📅 2022-12-7
Last updated