공부방/북스터디

[오브젝트] 1장

midcon 2023. 12. 15. 01:17

1장 정리

데이터 관점으로 코드를 작성하면 변경 이전 코드처럼 되기 쉽다.
모든 처리가 하나의 클래스 안에 위치하고, 나머지 클래스는 단지 데이터의 역할만 수행한다.
그래서 어떤 클래스가 어떤 정보를 갖고 있는지 너무 많은 정보를 알아야 한다.
이는 코드를 읽는 사람에게도 굉장한 부담을 준다.
또한 너무 많은 정보를 알고 있기 때문에 변경에도 쉽게 영향을 받고 취약하다.

 

캡슐화를 통해 객체의 내부 구현을 숨겨서 객체를 자율적인 존재로 만들면,
객체끼리 메시지를 전달함에 있어서 오로지 퍼블릭 인터페이스에만 의존한다.
즉, 메시지를 수행할 객체의 구현 세부사항을 전혀 몰라도 동작할 수 있다.
알아야할 정보가 줄면 결합도 또한 자연스럽게 줄어든다.
또한 인터페이스에만 의존 하므로 객체의 내부 구현이 변경되어도 영향을 받지 않는다.

 

객체지향 설계에서는 각각의 객체를 자율적인 존재로 만들어 각자의 책임을 수행하도록 한다.
이렇게 책임의 관점에서 설계를 하면 하나의 객체가 가진 과도한 책임을 분산할 수 있다.
하지만 동일한 기능을 한가지 이상의 방법으로 설계할 수 있으므로 결합도와 자율성 사이에서 적절한 트레이드 오프가 필요하다.

 

객체지향적인 프로그래밍이란 흔히들 실세계의 모방이라고 설명한다.
하지만 객체지향적인 설계를 설명하기에 이 실세계의 모방이라는 개념은 적절하지 않다.
객체 세계에선 현실에서 무생물이거나 수동적인 존재를 생물처럼 능동적이고 자율적인 존재로 의인화한다.
훌륭한 객체지향 설계란 소프트웨어를 구성하는 모든 객체들이 자율적으로 행동하는 설계를 가리킨다.
애플리케이션의 기능을 구현하기 위해 객체들이 협력하는 과정속에서 객체들은 다른 객체에 의존하게 된다.
이런 의존성을 적절하게 관리하는것이 훌륭한 객체지향 설계이다.

 

인상깊었던 점

"객체지향적인 설계를 설명하기에 이 실세계의 모방이라는 개념은 적절하지 않다"
1장에서 가장 크게 와닿은건 이 내용이었다.
이전까지 저는 실세계의 모방이라는게 머리에 박혀서 코드를 짤 때 실세계에서는 어떻게 동작할까?
라는 생각을 위주로 코드를 짰던것 같다.
그래서 실세계에서 무생물인건 수동적으로, 생물인건 능동적인 개념으로 코드를 짜는 경향이 있었던것 같다.
지금이라도 이 고정관념에서 벗어날 수 있어서 다행이다.