백엔드분들과 소통을 하다보면 자연스럽게 DTO라는 이야기를 많이 하게됩니다.
뭐..데이터... 뭐... 그런거.. 어... 그래요... 대충 느낌은 알것같습니다
하고 넘어가긴했는데 마침 클린 코드에서도 DTO에 대한 이야기가 나와서
DTO 이야기를 좀 정리해볼까 합니다.
디미터 법칙(LoD)
디미터 법칙은 휴리스틱으로 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙입니다.
반대로 말하면 객체는 자신의 내부 구조를 외부에 노출(공개)시켜서는 안된다는 의미로도 볼 수 있습니다.
Law of Demeter라고 표기하며 "최소한의 지식 원칙"으로도 알려져있다고하네요
이러한 디미터 법칙은 어떤 객체가 다른 객체에 대해 지나치게 많은 정보를 알고 있는 경우
서로에 대한 결합도가 높아지며 이로 인해 좋지 못한 설계를 야기한다는 문제가 있다고합니다.
이것을 클린코드에서는
클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.
- 클래스 C
- f가 생성한 객체
- f의 인수로 넘어온 객체
- C 인스턴스 변수에 저장된 객체
라고 설명합니다.
자료 전달 객체 (Data Transfer Object)
이제 DTO에 대한 이야기입니다.
DTO는 자료 전달 객체의 줄임말로 자료구조체라고도 부릅니다.
자료구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스입니다.
클린코드에서는 DTO를 굉장히 유용한 구조체라고 표현하는데요
데이터베이스와 통신하거나, 소켓에서 받은 메시지의 구문을 분석할 때 매우 유용합니다.
흔한 용례는 데이터베이스에 저장되어 있는 러프한 정보를
애플리케이션 코드에서 사용할 형태의 객체로 변환하는 단계에서
가장 먼저 사용하게 되는 구조체입니다.
DTO는 순수하게 데이터를 저장하고 / 데이터에 대한 getter, setter만 가져야한다.
DTO는 어떠한 비즈니스 로직도 가져서는 안된다.
DTO는 저장, 검색, 직렬화, 역직렬화 로직만 가져야 한다.
참고한 레퍼런스
클린코드
https://dkswnkk.tistory.com/687
https://hudi.blog/data-transfer-object/
'취업준비' 카테고리의 다른 글
Jira는 왜 써야할까... (0) | 2023.07.28 |
---|