개발자 99% 커뮤니티에서 수다 떨어요!
2022.03.01
변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. - p119
개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. - p119
객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. - p119
때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다. - p122
즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미다. - p123
이런 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다. 양쪽 세상에서 단점만 모아놓은 구조다. - p125
ctxt가 객체라면 뭔가를 하라고 말해야지 속을 드러내라고 말하면 안된다. - p125
객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다. - p127
자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다. - p127
우수한 소프트웨어 개발자는 편견 없이 이 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다. - p128
이것으로 확실해졌다. 나는 지금까지 객체 지향 프로그래밍 (OOP) 을 제대로 이해하지 못 했다. 어쩌면 객체라는 개념에 대해 깊은 고민을 하지 않았을 지도 모른다. 코드를 작성하고 다른 사람의 코드를 보며 어렴풋이 느껴왔던 것들이 이 장을 읽으며 명확해졌다. 자료 구조를 사용한 코드와 객체 지향 코드는 정반대의 성격을 가지고 있다.
이 장은 다른 장에 비해 짧다. 그리고 클린 코드를 작성하는 방법을 직접적으로 알려주지 않는다. 하지만 자료 구조와 객체에 알맞은 특성을 제시한다. 이는 앞으로의 내 코딩 스타일에 큰 영향을 미칠 것 같다. 지금까지는 객체에 자료 구조를 섞은 엉망의 클래스를 만들어내곤 했다. 방향성을 가진 객체와 코드는 클린 코드를 작성하는데 도움이 될 것이다.
이 책은 어떤 상황에선 자료 구조가 수정하기에 쉽고, 반대의 상황에선 객체가 수정하기에 쉽다고 설명한다. 나는 주로 객체로 코딩하는 것을 선호한다. 한 번에 수정하기 어려울 정도로 같은 형태의 클래스가 모듈에 존재하는 경우도 드물 뿐더러, 리팩터링 툴을 비롯한 에디터의 힘을 빌리면 더 쉽게 수정 및 추가를 할 수 있다. 앞으로도 객체를 주로 사용할 것 같다. 물론 "동작을 공개하고 자료를 숨긴다" 는 교훈을 되새기며.
디미터 법칙: 최소 지식 원칙이라고도 한다. 객체는 다른 객체의 속사정을 몰라야 한다는 것을 의미하며, 객체에게 자료를 숨기고 함수를 공개하도록 한다. 이로써 객체의 자율성과 응집도를 높일 수 있다.