DTO / VO / Entity

장정윤·2022년 4월 21일
0

DTO (Data Transfer Object)

  • 계층 layer간 데이터 교환을 위해 사용하는 객체이다
  • 오로지 데이터 교환만을 위해 사용한다(로직 x, getter/setter 메소드만 갖는다.)

getter/setter 예시

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

setter를 가지는 경우 가변 객체로 활용할 수 있다
setter가 아닌 '생성자'를 이용해서 초기화하는 경우 불변 객체로 활용할 수 있다.
불변 객체로 만들면 데이터를 저다ㄹ하는 과정에서 데이터가 변조되지 않음을 보장할 수 있다.

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 (Value Object)

-값 그 자체를 표현하는 객체이다
-로직을 포함할 수 있고, 객체의 불변성을 보장한다
-서로 다른 이름을 갖는 VO 인스턴스라도 속성 값이 같다면, 같은 객체라고 할 수 있다
objedt 클래스의 equals()와 hashCode()를 오버라이딩 해야한다

// 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);
    }
}

오버라이딩 하지 않으면 Fail,,
오버라이딩 하면 테스트 통과 : 왜냐하면 VO는 주소가 아닌 값을 비교하기 때문이다.

Entity
실제 DB의 테이블과 매핑되는 객체이다
id를 통해 각각의 Entity를 구분하다
VO와 마찬가지로 로직을 가질 수 있다

public class Member {
    private final Long id;
    private final String email;
    private final String password;
    private final Integer age;

    public Member() {
    }

    public Member(Long id, String email, String password, Integer age) {
        this.id = id;
        this.email = email;
        this.password = password;
        this.age = age;
    }
}

정리..
DTO는 계층간 데이터 이동을 위해 사용하는 객체이다
VO는 값을 갖는 순수한 도메인이다
Entity는 이를 DB 테이블과 매핑하는 객체이다

profile
꾸준히 꼼꼼하게 ✉ Email: jjy306105@gmail.com

0개의 댓글