티스토리 뷰

DTO vs VO (Data Transfer Object / Value Object)

용도는 비슷하나, 간단히 DTO는 variable / VO는 value 같은 느낌
또다른 표현으로는, DTO는 Instance / VO는 Literal 같은 느낌
(느낌만!)

DTO

VO

Data Transfer Object

Value Object

프로세스간 데이터를 전달하는 객체

간단한 독립체(Entity)를 의미하는 작은 객체

사실상 용도는 둘다 도메인단위의 데이터를 저장하는 비슷한 용도

상태 변경 가능

Read-Only : 한번 값을 초기화하면 변경불가

Business logic까지 담아서 사용하기도.

equals()로 비교할때, 모든 값을 비교해야한다

ex) 보통 "CarDto"와 같이 클래스이름에 접미사로 용도를 나타낸다

  • 최대한 자제되던 setter/getter가 DTO에 이르러서야 허용.

  • 최근 다른 언어들에선 DTO의 인스턴스를 setter/getter대신 public으로 오픈하기도 한다. 자바는 역사가 있다보니 예전에 인스턴스를 private으로 막고 setter/getter를 사용하는것이 표준이었어서, 이 잔재가 남아 Spring 등 예전방식이 남아있는 부분에서 이 방식을 따라야하기도 한다.

  • 이 둘은 다르지만, 같다고 표현하는 곳도 많다.

같다고 보기도, 이렇게 세부적으로 분리하기도.
그냥 일단 지금 단계에서의 나는, 값변경여부 정도의 차이만 인지한채로 비슷한 용도로 상황에 맞게 사용하기로.

DTO, https://martinfowler.com/eaaCatalog/dataTransferObject.html


DAO (Data Access Object)

한마디로 DB에 액세스하는 객체
DB에 접근하는 이러한 로직들을 DAO로 모아 분리하는데는 누구든 동의할것이고,
다소 추상적이었던 DTO/VO에 반해 역할도 뚜렷해, 바로 사용하기 어렵지 않더라.

DB와 직접적 관련이 있는 객체인만큼, DAO의 메서드명은 CRUD로 바로 가져가보자.
(좀더 바깥의 Controller 레이어 메서드명은 좀더 도메인에 가깝게 짓는것이 좋을듯?)

ex) LottoDao.class, ArticleDao.class 등 기억


POJO (Plain Old Java Object)

배경

Java Object, Java Bean이라는 용어가 처음에 등장했는데, 이후에 EJB같은 프레임워크의 객체가 등장, 이는 갈수록 pure하지않게 더럽혀지고 생산성이 낮아졌다. 다시 예전처럼 돌아가겠다는 의미로 POJO 등장, 사실 개념은 특정 클래스에 종속되지않는 - 우리가 우테코 레벨1에서 만들었던 대부분이 POJO

예전엔 @Autowired 같은 설정들이 객체 밖에 빠져있어서 POJO였는데, 생산성이 너무 떨어져 편하게 요즘엔 Spring처럼 이런저런 annotation들을 붙이며 객체를 사용한다. 엄밀히는 어노테이션과 의존이 있으므로 POJO가 아니게 되지만, 그냥 이정도는 POJO로 보자는 분위기도 있고.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함