티스토리 뷰
DTO
DTO(Data Transfer Object)는 계층 간에 데이터 전송(이동)이라는 객체라는 의미를 가지고 있습니다.
여기서 계층은 View<-DTO->Controller<-DTO->Service 등을 말하며 각 계층마다 데이터를를 교환하는 객체입니다.
DTO는 로직을 가지지 않는 순수한 데이터 객체이고 getter, setter 메소드만 가진 클래스를 의미합니다.
public class UserDTO{
String id;
String name;
String password;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
}
위의 클래스를 보면 getter/setter 가 존재합니다.
여기서 중요한건 Property(프로퍼티) 개념인데, 자바는 Property가 문법적으로 제공되지 않습니다.
자바에서 프로퍼티라는 개념을 사용하기 위해 지켜야 할 약속이 있습니다.
setter/getter 에서 set과 get 이후에 나오는 단어가 property라고 약속하는 것입니다.
그래서 위 클래스에서 프로퍼티는 name과 age 입니다.
중요한 것은 프로퍼티가 멤버변수 name, age로 결정되는 것이 아닌 getter/setter에서의 name과 age임을 명심해야 합니다.
즉 멤버변수는 아무렇게 지어도 영향이 없고 getter/setter 로 프로퍼티(데이터)를 표현한다는 것이다.
자바는 다양한 프레임워크에서 데이터 자동화처리를 위해 리플렉션 기법을 사용하는데, 데이터 자동화 처리에서 제일 중요한 것은 표준규격입니다. 예를들어 윗 클래스 DTO에서 property가 name, age라면 name, age의 키값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있습니다.
중요한 것은, 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter가 실행된다는 점입니다.(눈에 보이지않음)
그래서 layer간(특히 서버 -> View로 이동 등)에 데이터를 넘길때에는 DTO를 쓰면 편하다는 것이 이런이유 때문입니다. View에 있는 form에서 name 필드 값을 프로퍼티에 맞춰 넘겼을 때, 받아야 하는 곳에서는 일일히 처리하는 것이 아니라 name속성의 이름이랑 매칭되는 프로퍼티에 자동적으로 DTO가 인스턴스화 되어 PersonDTO를 자료형으로 값을 받을 수 있습니다. 그래서 key-value 로 존재하는 데이터는 자동화 처리된 DTO로 변환되어 쉽게 데이터가 셋팅된 오브젝트를 받을 수 있습니다.출처
VO
VO(Value Object)]는 값 그 자체를 나태는 객체라는 의미를 가지고 있습니다.
VO의 핵심 역할은 equals() 와 hashcode()를 메소드재정의(오버라이딩)하는 것입니다.
즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별합니다.
VO와 DTO 차이점
VO는 DTO와 데이터를 전달하는 객체로 동일한 개념이다.
하지만 VO는 중요 로직에서 사용할 Data를 담는 객체입니다.
DTO는 계층간의 단순 통신용도로 오가는 Data를 전달하는 객체입니다.
즉 DTO는 목적 자체가 데이터의 전달이므로, 읽고 쓰는 것이 모두 가능해 가변성을 갖고,
VO는 불변성 및 read-only의 속성을 갖습니다.
'프로그래밍 > 자바-스프링' 카테고리의 다른 글
객체지향프로그래밍의 5원칙 : SOLID (0) | 2022.04.24 |
---|---|
OOP(객체지향프로그래밍)정의 4가지 특성 (0) | 2022.04.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
글 보관함