내용
41pg, 객체는 인간이 명확하게 인식하고 구별할 수 있는 물리적 또는 개념적 경계를 가진 것입니다.
48pg, 상태를 이용하면, 과거의 모든 행동 이력을 설명하지 않고, 행동의 결과를 간단하게 예측해 설명할 수 있다.
50pg,
결론적으로 모든 객체의 상태는 간단한 값과 객체의 조합으로 나타낼 수 있습니다.
이 때, 오브젝트의 상태를 구성하는 모든 특징을 총칭하여 오브젝트의 프로퍼티라고 부른다.
앨리스의 경우 키, 위치, 음료가 앨리스의 속성이됩니다.
51pg,
객체와 객체 사이의 의미 있는 연결을 링크라고 합니다.
오브젝트와 오브젝트 사이에 링크가 없으면 요청을 보내고 받을 수 없습니다.
즉, 객체의 링크를 통해서만 메시지를 주고받을 수 있습니다.
링크는 객체가 다른 객체를 참조할 수 있음을 의미하며, 이는 일반적으로 한 객체가 다른 객체의 식별자를 알고 있음을 나타냅니다.
오브젝트 사이의 선으로 표시되는 링크와 달리 오브젝트를 구성하는 간단한 값을 속성(attribute)이라고 합니다.
객체의 속성은 속성과 링크의 두 가지 유형의 조합으로 표현할 수 있습니다.
52pg,
객체 지향의 기본 아이디어는 상태와 상태를 조작하기 위한 행동을 단일 단위로 결합하는 것입니다.
객체의 상태를 변경하는 것은 객체의 자발적인 동작뿐입니다.
객체는 자신의 행동에 의해서만 상태가 변화하는 것을 보장함으로써 객체의 자율성을 유지합니다.
53pg,
객체의 동작은 상태의 영향을 받습니다.
-> 앨리스의 신장이 40cm 이하라면 문을 통과할 수 있다.
객체의 동작은 상태를 변경합니다.
-> 문을 통과한 후 앨리스의 위치는 아름다운 정원으로 바뀌어야 한다.
54pg,
객체가 어떤 행동을 하게 하는지는 객체가 외부에서 받은 메시지입니다.
개체는 받은 메시지에 따라 적절하게 행동하면서 협력에 참여하고 그 결과로 자신의 상태를 변경합니다.
개체는 협력에 참여하는 과정에서 자신의 상태뿐만 아니라 다른 개체의 상태 변경도 유발할 수 있습니다.
55pg,
행동은 외부 요청 또는 수신 도니 메시지에 응답하기 위해 작동하고 응답하는 활동입니다.
행동의 결과로 개체는 자신의 상태를 변경하거나 다른 개체에 메시지를 전달할 수 있습니다.
객체는 행동을 통해 다른 객체와의 연동에 참여하기 때문에, 행동은 외부에서 가시적이어야 한다.
앨리스 개체의 키를 줄이는 것이 앨리스 자체인 것처럼 음료 개체의 양을 줄이는 것은 음료 자체여야 한다.
앨리스는 단지 음료를 마셨다는 메시지를 전할 뿐이다.
음료의 양을 줄이는 것은 메시지를 받은 음료 자체의 몫이다.
56pg,
메시지 송신자는 메시지 수신자의 상태의 변화에 대해 전혀 모른다.
이것이 캡슐화가 의미하는 것입니다.
개체는 캡슐에 상태를 숨긴 채 외부에 노출되지 않습니다.
객체가 외부에 노출되는 것은 행동뿐이며, 외부에서 객체에 액세스할 수 있는 유일한 방법도 동작뿐입니다.
상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 물체의 자율성을 증가시킨다.
결론적으로, 상태를 명확하게 정의된 액션 세트 뒤에 캡슐화하는 것은 객체의 자율성을 높이고 협력을 간단하고 유연하게 만든다.
이것이 상태를 캡슐화해야 하는 이유다.
57pg,
객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정 속성이 객체 내에 존재함을 의미합니다.
이 속성을 식별자라고 합니다.
모든 오브젝트는 식별자를 가지며 식별자를 사용하여 오브젝트를 구별할 수 있습니다.
값과 객체의 가장 큰 차이점은 값에는 식별자가 없지만 객체에는 식별자가 있습니다.
상태를 이용하여 2개의 값이 동일한지 여부를 판단할 수 있는 성질을 동등성으로 한다.
값은 상태만을 사용하여 동등성을 결정하며 값의 상태는 변하지 않으므로 값은 인스턴스를 구별하기 위해 별도의 식별자를 필요로 하지 않습니다.
58pg,
식별자에 기초하여 오브젝트가 동일한지 여부를 결정할 수있는 특성을 동일성이라고합니다.
상태에 따라 오브젝트의 동일성을 결정할 수 없는 이유는 오브젝트가 가변 상태를 갖기 때문입니다.
값에는 식별자가 없으므로 상태를 사용한 동등성 검사를 사용하여 두 인스턴스를 비교해야 합니다.
개체는 상태를 변경할 수 있으므로 식별자를 사용하여 동일성 검사를 사용하여 두 인스턴스를 비교할 수 있습니다.
59pg,
참조 객체 또는 엔티티는 식별자를 가진 전통적인 의미의 객체를 가리키는 용어입니다.
값 객체(value object)는 식별자가 없는 값을 가리키는 용어입니다.
느낀 것
오브젝트가 가지고 있는 상태와 행동에 관한 내용이 많이 나왔다.
왜 Java와 같은 객체 지향 프로그래밍으로 매번 캡슐화가 강조되는지,
그 이유를 오늘부터 조금 알게 된 것 같다.
열쇠는 물체 간의 협력이지만, 이것이 잘 작동하려면
각 개체가 자신이 맡은 역할과 책임을 잘 수행할 수 있어야 합니다.
그리고 이것을 위해서는 반드시 자율적이어야 할 것이다.
이 자율성을 높이는 것이 캡슐화이다.
캡슐화를 통해 처음으로 각각의 역할과 책임에 더욱 집중할 수 있게 된다.
각각이 자신의 역할과 책임을 잘 수행하면 협력이 단순해진다.
개체 간의 협업이 중요하지만 이 프로세스를 단순화하는 것은 큰 의미입니다.
내 생각이 잘못되었을 수 있습니다.
그런데 바로 이렇게 생각하고 있다.
아직 구체적인 사례로 이 효용에 대해 직접 체감한 적은 없지만
지금까지 캡슐화를 왜 해야할지는 잘 모르겠지만, 점점 알고 있었다.