가취공부하자

[Clean Code] 6장. 객체와 자료구조 본문

c++/(책) Clean Code

[Clean Code] 6장. 객체와 자료구조

keepGGoing 2023. 7. 23. 15:00

책에 기억하고 싶은 내용을 정리한 것

 

변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다!

 

그저 조회함수와 설정함수로 변수를 다룬다고 클래스가 되지 않는다.

그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른채 자료의 핵심을 조작할 있어야 진정한 의미의 클래스다.

 

자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 편이 좋다. 아무 생각없이 get/set함수를 추가하는 방법이 가장 나쁘다.

 

객체와 자료구조는 근본적으로 양분된다.

객체 : 비공개 변수와 공개 함수만 포함.

자료구조 : 함수 없이 공개 변수만 포함

 

으로 이해해라

 

객체지향 코드에서는 자료 타입의 추가는 쉽다. 그러나 새로운 함수 추가는 어렵다. 모든 클래스에 함수를 추가해야하기 때문에..

 

자료구조에서는 함수 추가는 쉽다. 그러나 새로운 자료 타입의 추가는 어렵다. 전체 클래스의 코드를 수정해야하기 때문에..

 

디미터의  법칙 : 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.

 

 

객체에선 기차 충돌 같은 현상이 나타나는데, 일반적으로 조잡하다 여겨지는 방식이라 피하는 편이 좋다.

Ex) final string outputstr = ctxt.getOptions().getScratchDir().getAbsolutePath()

=> 임시 디렉토리의 절대경로를 얻기 위해

 

(해결) 이런절대경로를 얻기 보다는 ctxt 객체에 임시파일을 생성하라고 시키면 어떨까

BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);

 

-> ctxt 내부 구조를 드러내지 않으며 모듈에서 해당 함수는 자신이 몰라야하는 여러객체를 탐색할 필요가 없다. 따라서 디미터의 법칙을 위반하지 않는다!

 

 

자료전달객체 : 자료구조체의 전형적인 형태, 공개 변수만 있고 함수가 없는 클래스

자료구조체를 떄로는 자료 전달 객체(Data Transfer Object, DTO)라고라고 한다. 데이터베이스 통신이나 소켓에서 받은 메시지 구문을 분석할 유용하다.

 

활성레코드 : DTO 특수한 형태로,조회/설정함수 + save, find 같은같은 탐색함수도 제공한다.

 

, DTO, 활성레코드 모두 자료구조로 취급한다!

 

결론)

객체는 동작을 공객하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면 객체 타입을 추가하기는 쉬운반면, 기존 객체에 동작을 추가하기는 어렵다. (모든 타입에 동작 추가를 해줘야 해서)

 

자료구조에는 동작을 추가하기는 쉬우나, 새로운 자료 구조를 추가하긴 어렵다.

 

우수한 소프트웨어는 사실을 이해하고 직면한 문제에 최적인 해결책을 선택한다.

'c++ > (책) Clean Code' 카테고리의 다른 글

[Clean Code]8장. 경계  (0) 2023.07.23
[Clean Code] 7장 오류처리  (0) 2023.07.23
[Clean Code] 5장 형식 맞추기  (0) 2023.07.23
[Clean Code]4장 주석  (0) 2023.07.23
[Clean Code] 3장 함수  (0) 2023.07.23