Entity, DTO, VO

Lee·2023년 8월 4일

Entity

  • 실제 DB에 저장되는 클래스
  • Entity를 기준으로 DB 테이블의 스키마가 변경
  • 일반적으로 DB테이블에 존재하는 컬럼을 필드로 가진다.(개발자가 수정 가능)
public class User{
    private Integer id;
    private String name;
   	private String email;

	public User(String email){
		this.email = email
	}

	public void changeEmail(String email){
		this.email = email;
	}
    
    //getter 생략
}

DTO(Data Transfer Object)

  • layer 간 통신 용도로 쓰이는 데이터 전달 객체
  • 데이터를 전달하는 용도이기 때문에 내부에 로직을 가지지 않아야 한다.
public class Dto {
	private String data;
    
    public String getData() {
    	return data;
    }
    
    public void setData(String data) {
    	this.data = data;
    }
}

VO(Value Object)

  • 값 자체를 나타내는 개체
    • 값이 고유하므로 필드가 변해서는 안된다.
  • 로직을 가지는 메서드를 만들 수 있다.
  • VO 내부의 값이 고유하므로 필드의 값이 같은 경우 같은 객체라 생각해야 한다.
    • equals(), hashcode()를 override하여 같은 객체임을 명시
public class Vo{
	private String value1;
    private int value2;
    
    public Vo(String value1, int value2) {
    	this.value1 = value1;
        this.value2 = value2;
    }
    
    public String getValue1() {
    	return value1;
    }
    
    public int getValue2() {
    	return value2;
    }
    
    @Override
    public boolean equals(Object o){
			if(this == o) return true;
			if(o==null || getClass() != o.getClass()) return false;
			Vo vo = (Vo) o;
			return this.value1.equals(vo.getValue1()) && this.value2.equals(vo.getValue2()); 
	}

	@Override
	public int hashCode(){
		return Objects.hash(value1, value2);
	}
}
profile
발전하고 싶은 백엔드 개발자

0개의 댓글