[TIL] [2024.10.20] Clean Code
#노개북 #노마드코더 #개발자북클럽
오늘 읽은 범위 : 6장. 객체와 자료구조
절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다.
객체지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.
객체라면 내부 구조를 숨겨야한다. 반면, 자료구조라면 당연히 내부구조를 노출하므로 디미터 법칙에 위배되지 않는다.
자료구조와 객체의 차이는 설계의 의도와 책임 분리의 개념에 따라 정의된다.
디미터 법칙 : 잘 알려진 휴리스틱으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.
기차 충돌 (train wreck): 메서드 체이닝, 여러 메서드를 연속해서 호출하는 경우 코드가 길어지고 복잡해지는 현상.
객체 :
캡슐화 : 외부에서 데이터를 접근할 수 없도록 한다.
행위의 정의 & 책임의 분리 : 데이터 조작 및 상태 변경하는 모든 작업은 객체가 제공하는 메서드를 통해서만 이루어진다.
무결성 유지 : 유효성을 검증하여 잘못된 값을 입력하지 못하도록 한다.
자료구조 :
- 데이터를 담는 용도, 데이터 조작의 책임을 외부 함수나 클래스에 위임한다.
위와 같은 개념으로만 이해하고 있었는데, 갑자기 의문이 들었다. VO객체와 DTO객체는 데이터를 담는 용도로만 사용되는데, 캡슐화와 get/set 메서드를 통해서만 데이터 조작이 이루어진다. 그럼 VO객체와 DTO객체는 객체일까? 자료구조일까?
데이터와 행위의 결합 관점에서 살펴보면 VO와 DTO는 자료구조에 가깝다. 하지만 객체지향 설계의 관점에서는 VO, DTO가 데이터를 담는 역할을 넘어, 무결성을 보호하고 명확한 도메인 의미를 부여하기 때문에 객체라고 볼 수 있다. VO와 DTO가 "자료구조가 아닌 객체"로 불리는 이유는 데이터 보호와 도메인 의미 전달에 그 목적이 있기 때문이다.
Subscribe to my newsletter
Read articles from 김동진 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by