객체지향의 사실과 오해를 읽고 정리한 내용입니다. 제가 느낀대로 정리한 것이기에 책의 내용, 구성과 다소 다를 수 있습니다.
현실 세계를 모방하는 것이 아닌, 새로운 세계를 창조하는 것. 객체가 스스로 상태를 관리하는 점(자율성)이 현실세계와 다름 (요청에 의해 스스로 자신의 상태를 바꿈)
ex)
(현실) 사람이 컵에 물을 따름 -> 컵의 물 높이가 변화됨 ( 0 -> 30cm, 수동적)
(코드) 사람 객체가 물을 따랐다는 요청을 컵 객체에게 보냄 -> 컵 객체 스스로 물 높이를 변화시킴 ( 0 -> 30cm, 능동적, 자율성)
기능을 만들어가는 과정은 역할, 책임, 협력을 통해 이뤄짐
협력을 하는 방법 : 객체사이의 요청과 응답
역할과 책임 : 협력하는 사람들이 그 안에서 차지하는 책임, 임무 (ex, 손님의 역할은 주문)
여러 객체가 동일한 역할 수행 가능함. 역할은 대체 가능하며, 각 객체는 책임을 수행하는 방법은 자율적으로 선택할 수 있고, 하나의 객체가 동시에 여러 역할을 수행할 수 있음
프로퍼티 : 객체의 상태를 구성하는 모든 특징. 변경되지 않음. 정적. 속성(단순한 값) + 링크(다른 객체 가리킴)
프로퍼티 값 : 시간이 흐름에 따라 변경됨. 동적
링크 : 객체와 객체 사이의 의미 있는 연결
행동이란 외부의 요청에 응답하기 위해 동작하고 반응하는 활동
행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있음
행동은 외부에 가시적이어야 함
값 : 식별자 없음. 값의 상태는 변하지 않음. 불변 상태. 숫자, 날짜, 시간, 금액 등. 상태가 같으면 두 인스턴스 같은 것으로 판단함(동등성)
객체 : 시간에 따라 변경되는 상태. 행동을 통해 상태 변경함. 가변 상태. 식별자를 기반으로 객체가 같은지 판단(동일성)
각 객체 들에게 역할, 책임을 부여하고 객체 간의 협력을 통해 필요한 기능을 구현해 가는 것
궁극적인 목표를 달성하기 위해, 목표를 작은 책임들로 세분화하고, 각각의 책임을 수행할 수 있는 역할을 가진 객체가 다른 객체간의 요청&응답 으로 소통하는 것
책에서는 객체지향 설계와 클래스 지향 설계는 다르다고 말함.
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중해야 함.
클래스는 단지 구현 메커니즘일뿐 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 함
--> 클래스는 객체를 만들어내는 틀이고 객체는 인스턴스. 객체의 역할은 각각 로직에 따라 다를 수 있다고 이해했음. 하지만 현실적으로 객체와 클래스를 분리해서 설계하고 개발한다는 것이 와닿지는 않았음
그 외에도 알겠지만 모르겠고 모르겠지만 알겠고 하는 부분들이 있었는데 나중에 예시를 보면 더 잘 이해가 될 것 같다. 객체지향을 좀 더 명확히 정의내릴 수 있게 하고 생각해보게 한다는 점에서 좋았다.