728x90
01. 협력하는 객체들의 공동체
역할,책임,협력
객체의 특징
- 객체란 식별 가능한 개체 또는 사물이다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
- 역할은 관련성 높은 책임의 집합이다.
- 여러 객체가 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
- 하나의 객체가 동시에 여러 역할을 수행할 수 있다.
협력 속에 사는 객체
협력과 메세지
- 객체는 충분히 '협력적'이어야 한다.
-> 다른 객체의 요청에 응하고 응답해야한다. - 객체는 충분히 '자율적'이어야 한다.
-> 다른 객체의 요청에 따라 행동하지만, 최대한 스스로의 판단에 따라 결정하고 행동한다.
-> 이를 위해선 필요한 행동(behavio)과 상태(state)를 함께 지니고 있어야 한다.
-> 객체는 다른 객체가 '무엇(what)'을 하는지 알 수 있지만 '어떻게(How)' 수행하는지에 대해서는 알 수 없다.
메소드와 자율성
- 객체는 협력하기 위해 다른 객체에게 메세지를 전송하고 다른 객체로부터 메세지를 수신한다.
- 수신자는 수신된 메세지를 미리 정해진 자신만의 방법에 따라 메세지를 처리하는데 이를 메서드(method)라고 부른다.
- 외부의 요청이 무엇인지를 표현하는 메세지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.
객체지향의 본질
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
- 자율적인 객체란 상태와 행위를 함꼐 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할과 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메세지를 전송하고, 메세지를 수신한 객체는 메세지를 처리하는데 적합한 메서드를 자율적으로 선택한다.
훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메세지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다. 중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 메세지를 주고받으며 협력하는가다.
02. 이상한 나라의 객체
객체, 그리고 소프트웨어 나라
- 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다.
상태
상태와 프로퍼티
- 상태란 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
- 프로퍼티 : 객체의 상태를 구성하는 모든 특징을 통틀어 일컫는 말, 정적이다. ex) 사람의 키, 몸무게
- 프로퍼티 값 : 프로퍼티의 값, 동적이다(시간의 흐름에 따라 변경된다). ex) 170cm, 45kg
- 링크 : 객체와 객체 사이의 의미 있는 연결
- 속성(attribute) : 객체를 구성하는 단순한 값
객체는 자율적인 존재라는 점을 명심해라. 객체지향의 세계에서 객체는 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 스스로 자신의 상태를 책임져야 한다. 외부의 객체가 직접적으로 객체의 상태를 주무를 수 없다면 간적적으로 객체의 상태를 변경하거나 조회할 수 있는 방법이 필요한데 이것이 행동이다.
행동
상태와 행동
- 행동이란 외부의 요청 또는 수신된 메세지에 응답하기 위해 동작하고 반응하는 활동이다.
- 객체의 상태는 자발적으로 변경되지 않는다. 객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다.
- 객체의 행동은 객체 자신의 상태를 변경시킨다. 이는 부수 효과(side effect)를 초래한다.
- 객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다.
-> 객체의 행동은 상태에 영향을 받으며, 객체의 행동은 상태를 변경시킨다. - 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
협력과 행동
- 객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에 요청을 보내는 것이다. 요청을 수신한 객체는 요청을 처리하기 위해 적절한 방법에 따라 행동한다. 따라서 객체의 행동은 협력에 참여할 수 있는 유일한 방법이다.
- 객체는 수신된 메세지에 따라 적절히 행동하면서 협력에 참여하고 그 결과로 자신의 상태를 변경한다.
- 객체는 협력에 참여하는 과정에서 자기 자신의 상태뿐만 아니라 다른 객체의 상태 변경을 유발할 수 있다.
상태 캡슐화
- 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다. 객체가 외부에 노출하는 것은 행동뿐이며 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동뿐이다.
- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화 하는 것은 결괒거으로 객체의 자율성을 높인다.
식별자
- 객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다. 이 프로퍼티를 식별자라고 한다.
- 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.
단순한 값은 식별자를 가지지 않는다. - 값이 같은지의 여부는 상태가 같은지를 이용해 판단한다.
상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성(equality)이라고 한다.
상태를 이용해 동등성을 판단할 수 있는 이유는 값의 상태가 변하지 않기 때문이다. - 객체는 시간에 따라 변경되는 상태를 포함하며, 상태가 완전히 똑같더라도 두 객체는 독립적인 별개의 객체로 다뤄야 한다.
식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을 동일성(identical)이라고 한다.
728x90
'회고' 카테고리의 다른 글
우테코 7기 최종 코테 후기 (1) | 2024.12.16 |
---|---|
[우아한 테크코스] 프리코스 2주차 회고 (0) | 2024.10.30 |
[우아한 테크코스] 프리코스 1주차 회고 (3) | 2024.10.22 |
[24.06.28] 99클럽 코테 스터디 40일차 TIL (0) | 2024.06.28 |
[24.06.27] 99클럽 코테 스터디 39일차 TIL - filter (0) | 2024.06.27 |