20230224 엔티티와 값 객체

Daisy🌷·2023년 2월 24일
0

1-1. Identifier Equality

  • 클래스 내부에 식별자(id) 필드를 갖고 있다.
  • 객체의 동등 여부를 id로 구별한다.

1-2. Structural Equality

  • 클래스 내부의 필드(멤버)가 모두 같다면 두 객체는 같다.

2. Vo (Value Object) - 값 객체

  • vo는 값으로서 쓰일 수 있는 객체이다. vo는 해당 객체의 주소 값이 달라도 값(Structural Equality, 구조적 동등성)이 같으면 동일하다고 생각할 수 있다.
  • 만약 고유 번호(프로그래밍 세계에선 저장된 메모리 주소)가 서로 다른 50000원 짜리 지폐 2장이 있는 경우, 이 2장의 고유 번호는 서로 다르지만 50000원 이라는 값은 동일하다.

3. Entity

  • Entity는 Id로 구분된다. 따라서 고유한 식별자가 존재한다.
  • 대부분 가변적이다.
  • 수명이 존재한다.
  • 따라서 Entity는 Identifier Equality로 객체를 비교한다.

4. 수명의 관점으로 보는 vo와 Entity

Entity는 수명이 있다.

  • 객체가 어떻게 변화했는지, 어떤 상태인지에 대한 기록들을 가진다.

Value Object는 수명이 없다.

  • 쉽게 생성 및 삭제 가능
  • 수명이 없기 때문에 언제든지, 값 객체를 생성하여 대체 가능
  • vo는 독립적으로 존재할 수 없다.
    • vo는 값을 표현한다. 이러한 값을 가지고 있는 entity의 문맥 안에서만 의미를 가진다.

5. 불변성

value Object는 불변(Immutable)이어야만 한다.

  • value Object는 말 그대로 값 객체이다. 따라서 값을 변경할 때는 새로운 값 객체로 갈아 끼워주면 된다.
  • value Object를 변형 시킨다면, 값 객체는 Life Cycle을 가지게 된다.
    - 값 객체가 고유의 Life Cycle을 가지게 되면, 객체는 고유의 식별자를 가져야 하게 되고 이는 value object의 정의와 멀어지게 된다. → 따라서 vo는 불변적이어야 Life Cycle을 가지지 않게 되고, 이는 어느 상태의 순간 (값)이라는 것을 의미한다.
  • 어떤 객체를 불변으로 만들지 못하면, 그 객체는 vo로서도 사용 될 수 없다.

Entity는 대부분 가변(Mutable)이다.

  • 특정 vo들을 필드로 가지는 entity가 있는 경우, 해당 entity의 Life Cycle의 따라서 vo들은 새로운 vo로 바뀌게(대체) 될 수 있다. 따라서 Entity는 대부분 가변적이다.
profile
티스토리로 블로그를 이전했습니다. 😂 구경 오세요! 👉🏻 https://u-ryu-logs.tistory.com

0개의 댓글