VO (value object)

1-J-1·2024년 7월 3일

스프링을 공부하려고 보니 갑자기 VO라는 단어가 계속해서 나온다.
그만큼 중요하다는 거겠지... 귀찮지만 한 번 정리해본다.

VO 개념

VO를 찾아보면 다 하는 말이
값 자체를 나타내는 객체란다.
굳이 객체로 나타낼 필요가 있는건가?라는 생각이 들지만 더 찾아보면 알 수 있겠지

VO의 필요성

VO를 쓰는 이유는 primitive type이 도메인 객체를 모델링하기 충분치 않기 때문이라고 한다.

  1. primitive타입의 기능을 전부 사용하지 않는다.
    예를 들어, '나이'를 표현하기 위해 []integer을 사용하는 것이 적합할까? 나이를 곱하거나 나눌 수 없고 음수일 수 없기 때문에 적합하지 않다고 본다.
  2. 중복되어 사용될 때 모든 객체에서 표현 가능한지 확인해야 한다.
    예를 들어, '나이'라는 객체가 있다면 여러 곳에서 쓰일 수 있겠죠? 이제 '나이'라는 객체가 다른 곳에서 쓰일 때 유효성을 검사해야되는데 하나하나 검사하기 어렵기 때문에 불변성을 지니고 있어야 한다.

VO의 특성

VO특성은 필요성을 통해 알 수 있다.

  1. 불변성
    생성자를 통해 생성이 된 이후에는 값을 변경할 수 없어야 한다.
    이를 통해 참조 공유가 가능하며, 코드의 복잡성 감소시킨다.
    또한 명확한 이름과 동작을 가질 수 있다.
  2. 값 동등성
    각각의 값이 같다면 두 VO객체는 동일하다고 판단한다.
    (동일성과 다름; 동등성-속성비교, 동일성-참조값 비교)
  3. 자가 유효성 검사
    유효한 값으로만 객체를 만들 수 있게 한다.

이렇게 VO에 대해 알아보았다. 음~ 오케이
primitive obsession을 줄이기 위함!


출처

티스토리
티스토리

profile
엉덩

0개의 댓글