본문 바로가기
백수/java

DTO, VO

728x90
반응형

DTO

  • 순수하게 데이터를 담아 계층 간으로 전달하는 객체입니다.
  • 로직을 갖지 않은 순수한 데이터 객체이며 메서드로 getter, setter만을 가지고 있습니다.
  • Dto는 데이터 전달 만을 위한 객체라고 한다면 완전한 데이터 전달 용도로만 사용하기 때문에 getter, setter 로직만 필요합니다.
  • DB에서 꺼낸 데이터를 저장하는 Entity를 가지고 만드는 일종의 Wrapper라고 볼 수 있는데 Entity를 Controller와 같은 클라이언트 단과 직접 마주하는 계층에 직접 전달하는 대신 DTO를 사용해 데이터를 교환합니다.

예시

public class memberDto {
   private String name;
   private String tel;

   public String getName() {
     return name;
   }

   public void setName(String name) {
     this.name = name;
   }

   public String getTel() {
     return tel;
   }

   public void setTel(String tel) {
     this.tel = tel;
   }
}
  • 이를 통해 보내는 쪽에서는 setter를 이용하여 값을 담아 전달하고 받는 쪽에서는 getter를 이용하여 값을 꺼내 쓰게 됩니다.
  • 이때 setter의 경우 변조 가능성이 있기 때문에 아래와 같이 생성자로 값을 넣어주도록 하게 하면 전달하는 과정에서 변조가 불가능하게 됩니다.

예시

public class memberDto {
   private String name;
   private String tel;

 public memberDto(String name, String tel){
  this.name = namep;
  this.tel = tel;
 }

 public String getName() {
     return name;
 }

 public void setName(String name) {
     this.name = name;
 }

 public String getTel() {
     return tel;
 }

 public void setTel(String tel) {
     this.tel = tel;
 }
}

VO

  • 값 오브젝트로써 값을 위해 쓰이며 Read-Only의 특징을 가집니다.
  • VO의 경우 특정 값 자체를 표현하기 때문에 불변성의 보장을 위해 생성자를 이용해야 합니다.
  • VO는 서로 다른 이름을 갖는 VO 인스턴스라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체인 것이 핵심입니다.
  • VO는 값 그 자체를 나타내기 때문에 setter 같은 성격의 변조 가능성이 있는 메서드가 존재하면 안 되며 두 객체의 필드 값이 같다면 모두 같은 객체로 만드는 것이 핵심입니다.

DTO, VO 비교

DTO VO

목적 계층 간 데이터 전달 값 자체 표현
동등성 필드값이 같아도 같은 객체는 아님 필드값이 같으면 같은 객체
가변성 setter 존재 시 가변  
setter 비 존재 시 불가변 불변(Read-Only)  
로직 getter/setter외의 로직이 불필요 getter/setter외의 로직이 있어도 무방함
  • DTO는 가변의 성격을 가진 클래스이며 데이터 전송을 위해 존재합니다.(getter/setter)
  • VO는 값 그 자체의 의미를 가진 불변 클래스(Read-Only)를 의미합니다.(getter만 존재)
  • DTO는 인스턴스 개념이며, VO는 리터럴 개념 입니다.
  • DTO는 Layer간의 통신 용도로 오가는 객체이며, VO는 특정한 비즈니스 값을 담는 객체 입니다.
728x90
반응형

'백수 > java' 카테고리의 다른 글

1. OOP가 뭐죠?  (0) 2023.07.12
동기, 비동기  (0) 2023.07.05
알고리즘  (0) 2023.06.26
API(애플리케이션 프로그램 인터페이스)  (0) 2023.06.23
의존성  (0) 2023.06.22