Domain, Entity, VO

혁콩·2023년 3월 30일
0

Domain - 소프트웨어로 해결하고자 하는 영역
Domain model - 특정 도메인을 개념적으로 표현한 것, 즉 내가 개발하고자 하는 영역을 분석하고, 그 분석의 결과로 도출된 모델

이렇게 도출된 Domain model은 크게 Entity와 Value로 구분된다.
Entity와 Value의 가장 큰 차이는 식별자의 유뮤 이다.

Entity는

식별자를 가진다. 즉, 식별자 외의 데이터가 변경된다고 해당 객체가 다른 객체가 되는 것이 아니다.

Value는

식별자가 없으며 값 그 자체이다. 이 때문에 단 하나의 데이터라도 변경되면 다른 객체가 되어버린다. 이 때문에 같은 객체임을 보장하기 위해 불변으로 구현하는 것이 좋으며, setter는 구현하지 않는 것이 좋다.(생성자를 통해서만 값을 받음)
때문에 데이터 변경이 필요하다면 새로운 객체를 생성해야 한다.

그럼 Entity와 VO를 구분하는 이유는 무엇일까?

Spring에서 MyBatis를 사용하면 VO, JPA를 쓰는 경우에는 Entity라고 표현한다.
그 이유는 JPA는 ORM이고 MyBatis는 SQL-Mapper이기 때문이다. ORM은 RDB 객체를 자바 객체로 매핑하기에 객체간 관계 표현이 가능하며, 식별자를 가질 수 있다. 하지만 SQL-Mapper는 SQL문으로 RDB에 접근하기 때문에 관계나 식별자를 가질 수 없다.

여기서 또 다른 궁금증이 생긴다.

MyBatis로 DAO구조를 사용하는 것과 JPA의 Repository는 동일한 걸까?

결론부터 말하자면 다르다고 한다.
내용이 많으니 다음번에 정리해보겠다.
DAO와 Repository의 차이

다음 링크들을 참고하여 작성했습니다.

Domain, Entity, Value(Object)
DAO, DTO, VO 란? 간단한 개념 정리

profile
아는 척 하기 좋아하는 콩

0개의 댓글