Search

[독서 후기] 객체 지향의 사실과 오해

Created
2022/04/25
Tags
OOP
Book
Review
느낀 점들은 굉장히 많지만, 내가 느끼고 배운 것들만 간단히 나열해보고자 한다. 피처 개발 때문에 바빠서 시간을 많이 못 쓰는 관계로 만일 2회독을 하게 되면 조금 더 자세히 써보고 싶다. 특히 현재 객체지향 같지 않은 객체지향 코드를 짜고 있으면서 많은 의문을 가졌었는데, 짧은 시간의 독서였음에도 이 책을 읽으면서 상당히 느낀 점들이 많다. 다음에 읽을 때는 또 어떤 점들을 새롭게 배우게 될 지, 2회독의 타이밍은 어떻게 될 지 상당히 기대된다.

행동과 상태

1.
객체를 결정하는 것은 행동이다.
2.
행동이 상태를 결정한다.
3.
행동이 명확해야 추상화가 용이하다.

추상화

1.
추상화 과정에서 일반화와 특수화로 나눌 수 있다.
2.
타입은 추상화의 결과이다.

역할, 책임, 협력

1.
협력에 초점을 맞춰야 하고, 맥락을 고려해야 한다.
2.
유기적인 협력이 가능하도록 동적 모델링 추구하라.
3.
어떻게 보다는 무엇에 집중하라.

구조와 기능

1.
훌륭한 소프트웨어 충분조건이 훌륭한 기능이라면 필요조건은 훌륭한 구조이다.
2.
소프트웨어의 객체와 현실 세계의 객체는 다르므로 표현적 차이를 줄이기 위해선 도메인 모델링이 중요하다.
3.
도메인 모델링을 잘 해두면 소프트웨어에서 안정적인 구조를 만들어낼 수 있다.
4.
사용자의 유스케이스를 통해 시스템에서 제공하려는 기능의 목표를 정의할 수 있다.
5.
유스케이스는 곧 피처를 이용하는 시나리오로 볼 수 있다.
6.
객체 지향을 위해선 개념, 명세, 구현의 관점으로 코드 상에 나타나야 하고 개념은 도메인 (구조, 표현적 차이), 명세는 인터페이스 (은유, 의인화), 구현은 행위 (역할, 책임, 협력)와 관련 되어 있다.
7.
도메인 개념을 이용하는 것은 소프트웨어 상의 의미를 쉽게 유추하고 파악하기 위한 것이다.
8.
도메인 개념과 인터페이스 명세와의 관계와 달리 인터페이스 명세와 행위의 구현은 명확히 구분되어야 하고 가장 중요한 지점이다.
9.
명세는 안정적인 측면 (구조)를 드러내야 하고, 구현은 불안정적인 측면 (기능)을 드러내야 한다.
10.
개발자 관점에서 구현으로 많이 접근하겠지만, 이는 외부에 영향을 끼치지 않도록 드러나지 않아야 한다.