도메인 객체, Domain Object

조현수·2023년 1월 3일
0

Domain

먼저 도메인이란, 간단하게 해결하고자 하는 문제의 영역 = 도메인이라고 생각하면 된다. 개발자 입장에서는 요구사항, 문제 영역 등이 해당될 수 있다.

요즘 스프링을 공부하다보면 도메인, 도메인 객체라는 단어를 많이 듣게 된다. 특히 '도메인 객체'란 표현으로 접하게 되는데, 도메인 객체란 내가 개발하고자 하는 영역을 분석하고, 그 분석의 결과로 도출된 객체들을 일컫는다.
예를 들어, 쇼핑몰을 만든다고 할 때, 쇼핑몰의 주된 기능은 상품 구매일 것이다.

  • 상품 구매의 순서
    🎈 상품을 등록한다.
    🎈 회원이 상품을 구매한다.
    🎈 하나의 구매에 여러 상품을 구매할 수 있다.

이렇게 나온 것들로 Member, Product, Purchase, Purchase_detail 등 다양하게 엔티티를 만들어 낼 수 있다.

도메인 객체는 다시 Entity와 Value Object로 나뉘게 된다.

Entity

엔티티란 단어는 데이터베이스에서 주로 들어봤을 것이다. 하지만 엔티티는 객체지향에서도 사용된다. 엔티티의 가장 큰 특징은 식별자를 갖는 것이다. 즉 식별자 외의 상태가 변경된다고 해서 그 객체가 본디 그 객체가 아닌 것이 아니라는 의미이다. 위에서 Purchase는 주문 객체이다. 주문 객체는 id 필드를 식별자로 갖고 있으며, 주문을 취소하거나 주문 내용을 변경한다고 해서 다른 주문이 되지는 않는다.
(보통 도메인 객체를 엔티티라고 하는건가?) 어쨋든 엔티티 또는 도메인 객체는 다른 계층이나 컴포넌트들 사이에서 저달을 위해 사용되는 객체가 아니다.

데이터베이스의 데이터와 유사하다. 다만 객체지향의 엔티티는 행위를 갖고 있다. 객체는 상태와 행위를 갖고 있기 때문에 자신의 데이터를 가지고 필요한 행위를 구현할 수 있다. 이 차이를 이해하면 된다!

VO(Value Object)

엔티티 객체가 식별자를 갖고 있는게 특징이라면, VO는 식별자가 없이 그저 값만 들고 있는 것이 특징이다.
엔티티의 경우엔 식별자로 객체를 구분하기 때문에 상태가 변경된다고 해서 다른 객체가 되는 것은 아니지만, VO의 경우 식별자가 없으므로 상태가 변경되면 그냥 다른 객체가 되게 된다. 그렇기에 확실히 다른 객체임을 보장하기 위해 보통 VO는 불변 객체로 만들게 된다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글