[스진초 4기]Entity vs DTO vs VO

창진·2023년 8월 4일

[스진초 4기] 

목록 보기
6/11

DTO((Data Transfer Object) 란?

  • 계층간 데이터 전송 전달하기 위해 사용하는 객체

계층예시

  • 요청이나 응답 값을 전달하는 클래스로 사용하면 안됩니다.

  • 데이터를 담아서 데이터를 전달하는 바구니로 비유할 수 있습니다.

  • 로직을 갖지 않는 순수한 객체 입니다.

  • entitiy 데이터 베이스와 매핑되어 있는 클래스 입니다.

  • 오직 getter/ setter 메서드만 갖습니다.
    setter 메소드는 가변의 역할을 합니다. 여기서 setter를 없애주면 불변의성을 보장합니다.

코드 예시

public class carDTO {
  private String color;
  
  // Getter
  public String getColor() {
    return color;
  }  // color 를 get 메소드로 반환
  
  // Setter
  public void setColor(String c) {
    this.color = c;
  } // color를 setter 메소드로 지정
}
  • 간단히 말하면 데이터 전달용 입니다.

VO(Value Object)

  • 값 그 자체를 표현하는 객체 입니다.

  • 서로 다른 이름을 가진 vo의 인스턴스가 모든 속성 값이 같다면 같은 객체이다.

예시)
지폐나 전자제품과 같이 각기 고유한 일련번호를 가진 상품들이 있습니다. 하지만 우리는 일련번호(주소값)가 아닌 제품 자체(속성)로 상품을 비교합니다.
여기서 일련번호= 주소값 상품= 속성 이라고 할수 있습니다.

여기서 equals() 와 hashcode() 를 오버라이딩 해줘야지 속성들로 비교를 할수가 있습니다.

코드 예시

public class carVO {
	private final int id;
    private final String name;
    
	public Human(int id, String name){
    	this.id = id;
        this.name = name;
    }
    
    public int getId(){
    	return this.id;
    }

	public String getName(){
    	return this.name;
    }
}
  • 객체의 불변성 보장합니다.

  • 로직을 포함할수 있습니다.

  • 간단히 말하면 값 표현용 입니다.

Entity

  • 실제 db 테이블과 매핑 되는 클래스 입니다.

  • id로 구분합니다.

  • 로직을 포함할수 있습니다.

예시

정리

profile
안녕하세요

0개의 댓글