개발을 하다보면 DTO니 VO니 다양하게 사용하고 혼용해서 사용하고 있는데 정확히 둘은 어떤 차이점이 있으며 CASE별로 어느걸 사용해야될지 에 대해서 아는사람은 많지 않을것이다.
필자 또한 DTO로 되어있으면 DTO로 사용하고 VO로 되어있으면 VO로 사용하는데.. 사용법도 동일하고 객체로 주고받다보니 이놈이 이놈같고 저놈이 저놈같아서 그냥 아무 생각없이 사용하고 있던 사람중의 한명이다.
갑자기 궁금해져서 정확하게 DTO와 VO는 어떤 차이점이 있는지. 그리고 어떤 CASE에서 사용해야하는지에 대해 알아보고싶어졌다.
DTO (Data Transfer Object)
DTO의 목적은 데이터 전송을 위한 객체로, 주로 네트워크를 통해 데이터를 전송할 때 사용된다. 여러 개의 데이터를 묶어서 한 번에 전송하기 위해 설계되었다고 한다.
DTO는 일반적으로 가변성을 가지고 있는데, 데이터를 수집하거나 전송할 때 필요한 다양한 필드를 포함할 수 있다.
그리고 DTO는 비즈니스 로직을 포함하고 있지 않다. DTO 자체에는 비즈니스 로직이 포함되지 않으며, 단순히 데이터의 구조를 정의하는 역할을 합니다. 데이터 전송의 효율성을 높이기 위해 사용된다.
직렬화 가능: DTO는 직렬화가 가능하여 네트워크를 통해 쉽게 전송이 가능하다.
쉽게 정리하자면 DTO는 냅따 데이터만 전송하는 녀석이라고 볼수 있겠다. 로직이 포함되지않으니 데이터를 담아 전달 전달 하는 녀석이라고 볼수 있겠다.
VO (Value Object)
목적: VO는 값 객체로, 주로 특정한 값을 나타내기 위해 사용된다. 동일한 값을 가진 VO는 동일한 것으로 간주되며, 주로 불변성을 지니고 있다. 불변성을 모르는사람은 없겠지? DTO가 가변성을 지니고 있어서 변화에 능동적이라면, VO는 불변성이라 한번 값이 지정되면 변하지 않는 성질이라고 해석하면 된다.
불변성: VO는 생성 후 값이 변경되지 않으며, 변경이 필요할 경우 새로운 VO 인스턴스를 생성해야 한다. 이를 통해 데이터의 무결성을 보장한다.
비즈니스 로직 포함 가능: VO는 특정 값에 대한 비즈니스 로직(예: 값의 유효성 검사)을 포함할 수 있다. 이는 객체가 의미 있는 상태를 유지하도록 도와준다. 위에서 언급한 데이터 무결성과 연관이 있다.
동등성 비교: VO는 값에 따라 동등성을 비교하며, 동일한 값의 VO는 동일한 객체로 간주된다.
결론적으로 DTO는 데이터 전송이 주 목적이고, VO는 특정 값이나 상태를 표현하기에 좋다. 우리가 개발을 하다보면 데이터 전송이 주 목적이면 DTO, 그 외에 상태값이나 불변값을 표현하고 자 하면 VO를 사용하는게 본 의미에 더 알맞는 개발법이라고 할수 있을것 같다.
우리는 항상 코딩할때 의미를 모르고 사용하는 경우가 많다. 필자도 그렇다. 아직은 초짜 개발자이기때문에 그저 따라서 쳐보고 검색해서 쳐보고 그러다 어 되네? OK 하는 경우가 많다. 하지만 이런 개념을 짚고 알고 넘어간다면 좀더 개발자 다운 개발자가 될 한발자국을 걷는것이라고 생각한다.
'Study > Tip' 카테고리의 다른 글
SVN이란? (1) | 2024.09.09 |
---|---|
Spring Loaded 오픈소스 라이브러리 (4) | 2024.08.23 |
Log를 실시간으로 보자. SnakeTail (0) | 2024.08.16 |
Eclipse(이클립스)의 Console을 다른 텍스트 파일로 출력해보자. (0) | 2024.08.14 |
NotePad++에서 줄바꿈 (0) | 2024.08.02 |