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 처럼 사용할 수 있는 모든 구조에 적용시킬 수 있을 것 같다.
Value 는 상수, Object 는 변수
모든 객체를 Value 화 하자는 것이 immutable programming 개념이며, 함수형 언어에서 중요시 하는 부분이기도 합니다.
Javascript 의 Spread 연산자 (...) 를 이해해 보는 것이 좋을 듯 하네요...
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
좋은 답변 감사합니다.
그런데 ... 와 immutable programming 이 어떻게 관련이 있는지 잘 이해가 안되네요.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
https://wecodetheweb.com/2016/02/12/immutable-javascript-using-es6-and-beyond/
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit