DTO와 VO

이도원·2022년 12월 13일
0

객체지향

목록 보기
2/2

DTO (Data Transfer Object)

레이어 간 데이터를 전달하는 객체

특징

  • 데이터 접근 메서드 외에 기능을 가지지 않음(getter,setter)
    *정렬, 직렬화 등 데이터 표현을 위한 기능은 가질 수 있음
  • 데이터의 캡슐화를 통해 유연한 대응이 가능함(데이터 요청 수 감소 효과)

예시 코드

//getter와setter 메서드 만을 가진다
public class UserDTO {
    
    private String name;
    private String id;

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
}

//생성자를 이용한 불변 객체 (변조 방지)
public class UserDTO {

    private String name;
    private String id;

    public UserDTO(String name, String id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getId() {
        return id;
    }

}

VO (Value Object)

값을 가지는 객체

특징

  • 값 자체로 의미를 가지는 객체
  • 변하지 않은 값을 가지는 객체
    -> 값이 변하지 않음을 보장하며 코드의 안정성과 생산성을 높임
  • 값이 같다면 동일한 객체
    *각 개체를 비교하는 데 사용되는 ID 없음, 같은 객체인지 판단하기 위해 각 속성들 값 비교

예시 코드

//생성자를 이용한 불변 객체
public class CarVO {

    private final String color;

    public CarVO(String color) {
        this.color = color;
    }
    
}

//비교 Test
class CarVOTest {

    @Test
    void CarVOEqualTest() {
        final String color = "red";

        CarVO car1 = new CarVO(color);
        CarVO car2 = new CarVO(color);

        assertThat(car1).isEqualTo(car2);	//오류
        assertThat(car1).hasSameHashCodeAs(car2);	//오류

    }

}

//비교 overide 필요
public class CarVO {

    private final String color;

    public CarVO(String color) {
        this.color = color;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CarVO carVO = (CarVO) o;
        return Objects.equals(color, carVO.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(color);
    }
}

공통점

레이어 간 데이터 전달할 때 사용 가능

차이점

참고

https://maenco.tistory.com/entry/Java-DTO%EC%99%80-VO%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
studying

0개의 댓글