반응형
이 글은 조영호 님의 저서 "객체지향의 사실과 오해"를 읽고 정리한 내용이다. 객체 지향에 대해 엄청 이해하기 쉽게 풀어주셨다고 생각한다. 글의 맨 아래 참고 서적에 대한 링크를 공유한다.
객체
- 식별 가능한 개체 또는 사물을 의미한다.
- 객체로 표현하는 것은 구체적인 사물(자동차) 일 수도 있고, 추상적인 개념(시간) 일 수도 있다. 하나의 개별적인 실체로 식별 가능한 물리적, 개념적인 사물은 어떤 것이라도 객체가 될 수 있다. 인간의 인지 능력 안에서 개수를 셀 수 있거나, 다른 사물과 구별할 수 있으며, 생성 지점을 알 수 있고, 독립적인 하나의 단위로 인식할 수 있는 모든 사물을 의미한다.
- 객체는 상태(State), 행동(Behavior), 식별자(Identity)를 가진다.
- 객체의 상태를 조회하는 작업을 Query, 객체의 상태를 변경하는 작업을 Command 라 한다.
객체.상태
- 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현하는 것이다.
- 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 아래에 나오는 행동을 통해 간접적으로 변경이 가능하다.
객체.행동
- 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동을 의미한다.
- 객체는 행동의 결과로 자신의 상태를 변경하거나, 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와 협력에 참여하므로 행동은 외부에 가시적이다.
상태 캡슐화
- 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
- 이는 위에서 설명한 상태와 행동의 개념을 이해한다면 당연한 것이다. 객체가 외부에 노출하는 것은 행동뿐이고, 외부에서 객체에 접근할 수 있는 방법 역시 행동뿐이다. 메시지 송신자는 수신자의 상태 변경에 대해 전혀 알지 못해도 행동할 수 있으므로, 행동을 경계로 캡슐화하면 객체의 자율성이 높아진다. 객체의 자율성이 높아진다면 스스로 판단하고 스스로 결정할 수 있기 때문에 객체의 지능이 높아진다. 협력에 참여하는 객체들의 지능이 높아지면 협력 과정은 유연하고 간결해진다.
식별자
- 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다.
- 값은 식별자를 가지지 않기 때문에, 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다. 상태는 동등성(비슷한지의 여부)을 판단할 수 있지만 동일성(같은지의 여부)을 판단할 수 없다. 왜냐하면 시간에 따라 객체의 상태가 변하기 때문이다. 객체는 상태가 변경될 수 있기 때문에 두 인스턴스의 동일성을 확인하기 위해 식별자를 이용한다.
- 식별자를 기준으로 객체를 분류하면, 식별자가 있는 객체는 Reference Object, Entity이고, 식별자가 없는 객체는 Value Object가 된다.
참고자료
[1] 객체지향의 사실과 오해 | 2015 | 조영호 | 링크
반응형
'프로그래밍 > Spring Boot' 카테고리의 다른 글
Springboot 프로젝트 생성하기 (0) | 2021.08.16 |
---|---|
IntelliJ 단축키 (0) | 2021.08.08 |
Lombok (0) | 2021.08.08 |
Annotation 이란? (0) | 2021.08.08 |