티스토리 뷰
728x90
MVC에서 빼놓을 수 없는 것
VO와 DTO
나는 주로 VO를 많이 사용하는데,
DTO랑 VO가 뭐가 다른지도 모르고 그냥 사용해왔다..
사용은 안해도 차이는 알아야 적재적소에 사용하므로 알아보도록 하겠어
DTO
DTO는 계층간의 데이터를 전송하기 위한 객체로써, getter/setter를 사용하여 보내는 사람은 setter를 사용하여 값을 담고, 받는 사람은 getter를 사용하여 값을 꺼내 쓴다. 이때 값의 변조를 막고 싶다면 생성자로 불변 객체로 만들어 버리면 된다. 또한 DTO의 특성상 데이터 전달만은 목적으로 사용하기 때문에 getter/setter를 제외한 다른 로직이 필요가 없다.
public class MemberDto {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
불변 객체를 만들고 싶다. 또는 일정 부분을 불변하게 하고 싶다면, 생성자 사용해서 고정시키기
public class MemberDto {
private final String name;
private final int age;
public MemberDto(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
VO
VO의 경우 값 그 자체를 나타내는 객체로써, 핵심은 필드 값이 같다면 두 객체를 같은 객체로 본다는 것이다.
getter 메소드와 함께 비즈니스 로직도 포함할 수 있다. 단, setter 메소드는 가지지 않는다.
값 비교를 위해 equals()와 hashCode() 메소드를 오버라이딩 해줘야 한다.이때 당연하게도 주소값을 비교하는 경우의 문제점을 위해서 hashcode()와 equals()를 재정의하여 필드 값이 같다면 같은 객체로 인식될 수 있도록 해주어야 한다.
// Money.java
public class Money {
private final String currency;
private final int value;
public Money(String currency, int value) {
this.currency = currency;
this.value = value;
}
public String getCurrency() {
return currency;
}
public int getValue() {
return value;
}
}
// MoneyTest.java
public class MoneyTest {
@DisplayName("VO 동등비교를 한다.")
@Test
void isSameObjects() {
Money money1 = new Money("원", 10000);
Money money2 = new Money("원", 10000);
assertThat(money1).isEqualTo(money2);
assertThat(money1).hasSameHashCodeAs(money2);
}
}
그러니까 DTO는 데이터를 전달하기 위한 객체, VO는 그 값 자체
흐음.. 가만보니까 나 VO라고 명명하면서 DTO를 사용해왔네... ^^;
내부에 늘 getter, setter를 만들었었는데, VO는 setter를 가질 수 없잖아
불변 값을 전달하는 거니까...
허허 이제라도 알았으니 제대로 쓰자고....
REF.
https://maenco.tistory.com/entry/Java-DTO와-VO의-차이
728x90
'(기초)그래서 뭘 배운거야? > SPRING' 카테고리의 다른 글
SPRING-105-SPRING이란 무엇인가? (0) | 2022.04.01 |
---|---|
SPRING-104-Spring Web MVC : MyBatis - XML (0) | 2021.12.28 |
SPRING-103-Spring Web MVC : MyBatis - JAVA (0) | 2021.12.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- html
- 비전공
- 정보처리기사실기
- spantag
- ol>li
- tabletag
- pretag
- 합격
- marktag
- definition List
- 긴문장
- 정처기
- boldtag
- 2021년2회
- hr tag
- 93점
- 2021년42회
- 단락태그
- emtag
- br tag
- 줄글
- hn태그
- usemap
- imgtag
- ptag
- 정보처리기사필기
- tablespan
- ul>li
- 정보처리기사
- 복습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함