본문 바로가기
Back-end/Spring Boot

Entity / Value Object / DTO / DAO 간단하게 개념 정립하기

by whatamigonnabe 2022. 7. 3.

SpringBoot 강의를 들으며, Entity, Value Object, DTO, DAO라는 용어들을 많이 봐왔지만 개념도 없어서 당황스러웠다.

그래서 간략하게 나마 개념을 정리해보았다.

 

연속성(Continuity)

위의 개념들을 이해하기 위해서는 '연속성'라는 것을 먼저 이해할 필요가 있었다. 내가 이해한 연속성이란 '어떤 속성이 바뀌더라도 자신의 identity(자기동일성)을 유지하는 것'이다. 예를 들자면, 홍길동이라는 한 사람은 전화번호가 바뀌더라도, 사는 곳이 바뀌더라도 여전히 같은 홍길동이다. 이때 '홍길동은 연속성이 있다'라고 말할 수 있다.

 

Entity

정보들을 담고 있으면서 연속성이 있는 객체를 말한다. 예를 들면 홍길동 객체가 이에 해당할 수 있을 것이다. 조금더 실제적인 예시로는 쇼핑몰에서 고객 객체가 엔티티가 될 것이다. 하지만, 김민수 고객과 박철수 고객을 어떻게 구분할 수 있을까? 이런 문제 때문에 당연히도 엔티티는 유일성을 지키는 멤버를 가지고 있다. 예를 들면 주민번호가 그 역할을 맡을 수도 있을 것이다.

 

Value Object(값 객체)

값 그 자체를 표현하는 객체. 두 개 이상의 원시 데이터 타입을 멤버가 모여 하나의 정보를 나타내는 객체를 말한다. 예를들면 R, G, B 세 개의 값이 모여 하나의 색을 표현하는 rgb값, x좌표와 y좌표로 하나의 위치를 표현하는 위치 정보가 이에 해당할 것이다. VO는 다른 참조 객체와 달리 하나의 원시 데이터처럼 이해하면 좋을 것 같다. 그리고 이것은 엔티티와 달리 연속성이 없고, 모든 멤버변수가 같기만 하면 동일하다고 볼 수 있을 것이다. 

 

DTO(Data transfer Object)

말 그대도 정보를 전달하는 객체이다. 달리 말하면, 계층간 정보를 교환하는 객체이다. 조금 더 설명하면, 클라이언트로부터 정보를 받을 때, 객체에 담아서 받고, 다시 서버에서 비즈니스 로직을 처리하는 클래스로 정보를 넘길 때 이 정보를 담은 객체, 즉 DTO를 통해서 전달한다. 이렇게 하는 이유는 여러 이용자의 정보 다발의 형태가 같고, 이 정보 다발이 여러 곳으로 쓰이기 때문에 코드의 반복을 줄일 수 있고, 코드의 수정에 용이하기 때문이다.

 

DAO(Data Access Object)

데이터 접근 객체. DB접근이 필요한 로직마다 직접 DB에 접근하지 않고, 객체를 통해서 접근하는 것이다. DB에 접근하려면 매번 Connection을 해줘야하는데, 이 부분을 객체로 따로 분리함으로서 효율적으로 DB에 접근할 수 있다.

 

Value Object VS DTO

둘 다 어떤 정보를 전달한다는 측면에서 비슷하지만, '목적'에서 가장 큰 차이가 있는 것 같다 VO는 그 자체의 값을 표현하는데 목적이 있고, DTO는 계층간 정보를 교환하기 위해 존재한다. 따라서 VO는 어디서 쓰이든 그저 값이기 때문에 상관 없지만, DTO는 특정 목적/위치로만 쓰인다.