객체지향의 사실과 오해(1, 2장)

Ahri·2022년 6월 11일
0

객체지향의 사실과 오해를 읽고 정리한 내용입니다. 제가 느낀대로 정리한 것이기에 책의 내용, 구성과 다소 다를 수 있습니다.

1장. 협력하는 객체 들의 공동체

1) 객체의 자율성

현실 세계를 모방하는 것이 아닌, 새로운 세계를 창조하는 것. 객체가 스스로 상태를 관리하는 점(자율성)이 현실세계와 다름 (요청에 의해 스스로 자신의 상태를 바꿈)

ex)
(현실) 사람이 컵에 물을 따름 -> 컵의 물 높이가 변화됨 ( 0 -> 30cm, 수동적)
(코드) 사람 객체가 물을 따랐다는 요청을 컵 객체에게 보냄 -> 컵 객체 스스로 물 높이를 변화시킴 ( 0 -> 30cm, 능동적, 자율성)

2) 역할, 책임 , 협력

기능을 만들어가는 과정은 역할, 책임, 협력을 통해 이뤄짐

협력을 하는 방법 : 객체사이의 요청과 응답

역할과 책임 : 협력하는 사람들이 그 안에서 차지하는 책임, 임무 (ex, 손님의 역할은 주문)
여러 객체가 동일한 역할 수행 가능함. 역할은 대체 가능하며, 각 객체는 책임을 수행하는 방법은 자율적으로 선택할 수 있고, 하나의 객체가 동시에 여러 역할을 수행할 수 있음

2장. 이상한 나라의 객체

1) 상태 : 객체는 상태를 가지며 상태는 변경가능

프로퍼티 : 객체의 상태를 구성하는 모든 특징. 변경되지 않음. 정적. 속성(단순한 값) + 링크(다른 객체 가리킴)
프로퍼티 값 : 시간이 흐름에 따라 변경됨. 동적
링크 : 객체와 객체 사이의 의미 있는 연결

2) 행동 : 상태를 변화시키는 것은 객체의 행동

행동이란 외부의 요청에 응답하기 위해 동작하고 반응하는 활동
행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있음
행동은 외부에 가시적이어야 함

  • 캡슐화 : 객체는 상태를 감추구 외부에 행동만 노출함. 외부에서 객체에 접근할 유일한 방법은 행동일뿐임.
    상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만듦

3) 식별자 : 객체는 유일하게 식별 가능. 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티

값 : 식별자 없음. 값의 상태는 변하지 않음. 불변 상태. 숫자, 날짜, 시간, 금액 등. 상태가 같으면 두 인스턴스 같은 것으로 판단함(동등성)
객체 : 시간에 따라 변경되는 상태. 행동을 통해 상태 변경함. 가변 상태. 식별자를 기반으로 객체가 같은지 판단(동일성)

나의 생각 정리

객체지향이란?

각 객체 들에게 역할, 책임을 부여하고 객체 간의 협력을 통해 필요한 기능을 구현해 가는 것
궁극적인 목표를 달성하기 위해, 목표를 작은 책임들로 세분화하고, 각각의 책임을 수행할 수 있는 역할을 가진 객체가 다른 객체간의 요청&응답 으로 소통하는 것

객체에 집중한다는 것 ≠ 클래스에 집중한다는 것

책에서는 객체지향 설계와 클래스 지향 설계는 다르다고 말함.
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중해야 함.
클래스는 단지 구현 메커니즘일뿐 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 함
--> 클래스는 객체를 만들어내는 틀이고 객체는 인스턴스. 객체의 역할은 각각 로직에 따라 다를 수 있다고 이해했음. 하지만 현실적으로 객체와 클래스를 분리해서 설계하고 개발한다는 것이 와닿지는 않았음

그 외...

그 외에도 알겠지만 모르겠고 모르겠지만 알겠고 하는 부분들이 있었는데 나중에 예시를 보면 더 잘 이해가 될 것 같다. 객체지향을 좀 더 명확히 정의내릴 수 있게 하고 생각해보게 한다는 점에서 좋았다.

0개의 댓글