데이터베이스에서 테이블과 매핑되는 객체, 도메인의 중요한 개념이나 실체를 표현한다.
데이터베이스의 테이블에 매핑되기 때문에, Entity는 데이터베이스의 행(Row)과 1:1로 매핑된다.
고유 식별자(primary Key)를 바탕으로 객체의 정체성을 부여한다. 비즈니스 로직을 포함할 수 있다.
Entity를 요청이나 응답값을 전달하는 클래스로 사용해서는 안 된다.
setter
메서드를 가지는 경우 가변 객체로 활용할 수 있다.
계층 간 데이터 전송을 위한 객체. 데이터를 담아 전달하는 바구니를 생각하면 쉽다.
DTO는 특정 도메인의 개념이나 실체를 표현하는 것이 아니라, 단순히 데이터를 전송하기 위한 용도로 사용된다.
getter()
/setter()
메서드를 포함하며, 그 외의 데이터의 가공이나 비즈니스 로직 처리는 하지 않는다.
VO는 값 자체를 표현하는 객체. 객체들의 주소가 달라도 값이 같으면 동일한 것으로 여긴다. 불변 객체이다.
getter()
메소드와 함께 비즈니스 로직도 포함할 수 있다. 단, setter()
메소드는 가지지 않는다. 또, 값 비교를 위해 equals()
와 hashCode()
메소드를 오버라이딩 해줘야 한다.
VO는 주소가 아닌 값을 비교하기 때문에 equals()
와 hashCode()
메소드를 오버라이딩 하지 않으면 안된다.
참고