Value Object PatternsteemCreated with Sketch.

in #kr-dev6 years ago (edited)

Value Object Pattern

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

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

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

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

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


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 처럼 사용할 수 있는 모든 구조에 적용시킬 수 있을 것 같다.

Sort:  

Value 는 상수, Object 는 변수
모든 객체를 Value 화 하자는 것이 immutable programming 개념이며, 함수형 언어에서 중요시 하는 부분이기도 합니다.
Javascript 의 Spread 연산자 (...) 를 이해해 보는 것이 좋을 듯 하네요...

좋은 답변 감사합니다.

그런데 ... 와 immutable programming 이 어떻게 관련이 있는지 잘 이해가 안되네요.

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 70272.86
ETH 3773.70
USDT 1.00
SBD 3.82