Value object VS Data transfer object - team-wedev/wedev GitHub Wiki


Value object

computer science ์—์„œ Value object๋Š” ๋™์ผ์„ฑ(equality)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€ ์•Š๋Š” ๋‹จ์ˆœํ•œ entity๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ฆ‰, ๋‘ ๊ฐœ์˜ value object๋Š” ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉด ๊ฐ™๋‹ค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค๋งŒ ์ด ๋‘ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋œปํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Value object๋Š” ๋ฐ˜๋“œ์‹œ immutable ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•˜๊ฒŒ ์ƒ์„ฑ ๋œ ๋‘ ๊ฐœ์˜ value object๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์•”๋ฌต์ ์ธ ๊ณ„์•ฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Data Transfer Object

image

์ถœ์ฒ˜ : https://martinfowler.com/eaaCatalog/dataTransferObject.html

์›๊ฒฉ์— ์žˆ๋Š” interface๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ, ๊ฐ๊ฐ์˜ ํ˜ธ์ถœ์€ ๋งŽ์€ ๋น„์šฉ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ˜ธ์ถœ์˜ ๋นˆ๋„๋ฅผ ์ค„์ธ๋‹ค๋ฉด ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. - ์ด๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๋Š” ์ž๋ฐ”์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅ ํ• ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Data Transfer Object๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ด ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” serializable ๋˜์–ด connection ๋„ˆ๋จธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต assembler๋Š” server side ์—์„œ DTO์™€ ์–ด๋–ค domain object ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

DTO๋Š” multiple remote call์„ ํ•˜๋‚˜์˜ call๋กœ ์ผ๊ด„์ฒ˜๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์ฃผ์š”ํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ serialization mechanism์„ ์บก์Šํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋˜๋‹ค๋ฅธ ์žฅ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.