Ethan Hur's blog

Value Object Pattern

2018-03-05

Value Object Pattern

Value Object Pattern 에서는 객체를 마치 Primitive 한 값처럼 사용한다.

만약 값 5에 5를 더하는 메소드를 호출하면, 그 객체가 값이 10이 되는 것이 아니라 10이라는 값을 담은 객체를 반환한다.

Value Object 들은 initialized 된 뒤 값이 바뀌면 안된다.

Primitive Value 처럼 쓰고 싶을 때 사용하면 될 듯 하다.

핵심 아이디어는 Immutable 한 객체로 쓰자 이다.


1
2
3
4
Dollar five = new Dollar(5);
five.add(new Dollar(5)); <- 1 (덜 맞음)
Dollar ten = five.add(new Dollar(5)); <- 2 (맞음)

한동안 위의 1번이 맞는 것인지, 2번이 맞는 것인지 고민을 했는데, TDD 책을 읽으며 켄트 벡 아조씨가 잘 정리해줬다.

1번처럼 구현하는 것보다 2번처럼 구현하는 것이 나중에 오류가 날 여지가 적다.

1번처럼 구현할 경우에는 런타임에서 해당 값이 어떤 값을 취하게 되는지 알기가 매우 어려울 수도 있다. mutable 한 객체가 되기 때문이다.

TDD 책처럼 currency 나, duration 등에 사용할 수 있을 것 같다. 사실 primitive value 처럼 사용할 수 있는 모든 구조에 적용시킬 수 있을 것 같다.