엔티티의 정의와 특징
- 식별자
- 고유한 식별자
엔티티의 변화와 식별자의 불변성
- 속성 변화와 식별자
- 엔티티의 속성이 변경되어도 식별자가 변하지 않음.
- 주문의 배송지 주소나 상태가 변경되어도 식별자가 동일하게 유지되어야함
동등성
- 동등성 비교
equals()
hashCode
public class Order { private String orderNumber; private List<OrderLine> orderLines; // 기타 필드 // 기타 메서드 ... @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Order other = (Order) obj; if (orderNumber == null) { if (other.orderNumber != null) return false; } else if (!orderNumber.equals(other.orderNumber)) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((orderNumber == null) ? 0 : orderNumber.hashCode()); return result; } }
엔티티 식별자 생성
식별자 생성 중요성
- 엔티티의 식별
- 엔티티는 고유한 식별자를 가지고, 엔티티의 동일성 유지에 도움
- 식별자는 엔티티를 구별하고 추적하는 데 핵심적인 역할
식별자 생성
- 특정 규칙에 따라 생성
- 도메인이나 비즈니스 규칙에 따라 식별자 생성
- 현재 시간과 다른 값을 조합하는 방식이 흔함
- UUID 사용
- 범용적으로 고유 식별자를 생성할 수 있음.
- 대부분의 개발 언어에서 UUID 생성기를 제공
- 값 직접 입력
- 사용자가 직접 식별자 입력 ( 회원 ID , 이메일 )
- 중복 입력 방지가 필요함
- 일련번호 사용
- DB의 시퀀스 나 자동 증가 컬럼 사용
식별자 생성 전략 선택의 고려 사항
- 도메인 특징과 기술
- 도메인의 특징과 사용하는 기술에 따라 적절한 식별자 생성 전략을 선택
- 동시성과 고유성
- 동시에 식별자를 생성해도 고유성 보장
- 나노 ID
- 최근 고유 식별자 생성을 위해 사용되는 방식 중 하나로, Nano ID를 사용하는 곳도 증가하고 있다.
자바 코드 UUID
import java.util.UUID;
public class IdentifierGenerator {
public String generateUUID() {
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
}
밸류 타입
- 밸류 타입의 정의
- 완전한 하나의 개념
- 밸류 타입은 개념적으로
완전한 하나
를 표현하는 데 사용된다.
- 여러 데이터가 모여 하나의 의미있는 개념을 이루는 경우 사용
- 밸류 타입은 개념적으로
- 예시
public class ShippingInfo { private String receiverName; private String receiverPhoneNumber; private String shippingAddress1; private String shippingAddress2; private String shippingZipcode; }
- ShippingInfo 안의 데이터를 보면
private String receiverName; private String receiverPhoneNumber;
- 는 받는 사람
private String shippingAddress1; private String shippingAddress2; private String shippingZipcode;
- 는 주소
- 그룹으로 나누고
ShippingInfo
는- 받는 사람
- 주소
- 그룹으로 분리가 가능하다.
- ShippingInfo 안의 데이터를 보면
- 완전한 하나의 개념
- 밸류 타입 예시
- 받는 사람
public class Receiver { private String name; private String phoneNumber; public Receiver(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; } // getter 메서드 ... }
- 주소
public class Address { private String address1; private String address2; private String zipcode; public Address(String address1, String address2, String zipcode) { this.address1 = address1; this.address2 = address2; this.zipcode = zipcode; } // getter 메서드 ... }
- ShppingInfo
public class ShippingInfo { private Receiver receiver; private Address address; public ShippingInfo(Receiver receiver, Address address) { this.receiver = receiver; this.address = address; } // getter 메서드 ... }
- 받는 사람
밸류 타입은 도메인의 의미를 명확하게 전달하는 데 중요함
- 밸류 타입을 재사용을 고려하여 설계함.
- 코드 중복 DOWN , 일관성 유지하는 데 도움이 됨.
- 적절한 범위의 밸류 타입
- 너무 많은 정보를 하나의 밸류 타입에 넣거나 너무 적은 정보만을 넣는 것을 피해야함
- 적절한 범위에서 의미 있는 단위로 밸류 타입을 정의해야한다.
Uploaded by N2T
'도메인주도개발' 카테고리의 다른 글
도메인 전문가와 개발자 간 지식 공유 (0) | 2023.12.30 |
---|---|
도메인 모델 (0) | 2023.12.30 |
도메인 모델 패턴 (0) | 2023.12.30 |
엔티티 식별자와 밸류 타입 (0) | 2023.12.30 |
도메인이란? (0) | 2023.12.30 |