Intro
๋ถ๋ณ ๊ฐ์ฒด๋ ๊ฐ์ฒด ์์ฑ ์ดํ, ๋ด๋ถ์ ์ํ๊ฐ ๋ณํ์ง ์๋ ๊ฐ์ฒด์ด๋ค.
๋ง์ ์ฑ ์ด๋ ๋ธ๋ก๊ทธ ๊ธ์์ ์ด๋ฌํ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์๋ ํฐ ์ด์ ์ด ์๋ค๊ณ ํ๋ค. ๊ทธ ์ด์ ๋ ๊ต์ฅํ ๋ค์ํ๊ณ ๋ง์ผ๋ฉฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
๋ค์์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ๋์ดํ ๊ฒ์ด๋ค.
- Thread Safe ํ์ฌ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉํ๊ณ , ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
- ์คํจ ์์์ ์ธ(Failure Atomic) ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค.
- ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฉ์๋ ํธ์ถ ์ด์ ์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ด๋ค.
- Cache๋ Map, Set๋ฑ์ ์์๋ก ํ์ฉํ๊ธฐ ์ข๋ค.
- ๋ถ์ ํจ๊ณผ(Side Effect)๋ฅผ ํผํด ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์๋ค.
- ์์ ํจ์๋ค๋ก ๊ตฌ์ฑ๋์์ผ๋ฉฐ, ๊ฐ์ฒด์ ์ํ๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ฑ๋ฅ์ ๋์ธ๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ค์บํด์ผํ๋ ๊ฐ์ฒด์ ์๊ฐ ์ค๊ธฐ ๋๋ฌธ์ ์ง์ฐ์๊ฐ์ ์ค์ผ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ๋ ์ข์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ฉํ๋ฉด ๋์ง, ์ฌ๋๋ค์ ์ ๊ทธ๋ ๊ฒ ํ์ง ์์๊น? ์ด์ ๋ถํฐ ๊ทธ ์ด์ ์ ๋ํด ์ดํด๋ณด๋๋ก ํ์.
Value Object์ Reference Object(Entity)
์นธํธ ๋ฐฑ์ ํ๋ก๊ทธ๋จ์ ๊ฐ์ฅ ํ๋ฅญํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ์ค๋ธ์ ํธ๋ค๊ณผ ์ํ์ ์ธ ๊ฐ์ ๋ํ๋ด๋ ์ค๋ธ์ ํธ๋ค์ ์กฐํฉ์ผ๋ก ํํํ๋ ๊ฒ์ด๋ผ๊ณ ๋งํ๋ค.
์ฌ๊ธฐ์ ๋ค์ ๋ณต์กํ ๊ฐ๋ ์ด ๋์ค๋๋ฐ, ๋ฐ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ์ค๋ธ์ ํธ์ ์ํ์ ์ธ ๊ฐ์ ๋ํ๋ด๋ ์ค๋ธ์ ํธ์ด๋ค. ์ฐ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ์ค๋ธ์ ํธ๋, ์ ์ผํ๊ฒ ์๋ณ๊ฐ๋ฅํ ์๋ณ์๊ฐ ์กด์ฌํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋งํ๋ค. ์ด๋ DDD์์ ์ํฐํฐ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค.
์๋ณ ๊ฐ๋ฅํ ์๋ณ์๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ๋ฌด์จ ๋ง์ผ๊น? ๋๋ฑ์ฑ์ ๊ด์ ์๋ ์ด 3๊ฐ์ง์ ๊ด์ ์ด ์๋ค.
์ฒซ ๋ฒ์งธ๋ก Reference equality(์ฐธ์กฐ ๋๋ฑ์ฑ)์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง ๋ ๋๋ฑํ๋ค๊ณ ํ๋ค. ๋ ๋ฒ์งธ๋ก Identifier equality(์๋ณ์ ๋๋ฑ์ฑ)์ ์๋ณ์(id์ ๊ฐ์)๊ฐ ๋์ผํ ๊ฐ์ฒด๋ ๊ฐ์ ๊ฐ์ฒด๋ผ๊ณ ํ๋จํ๋ค. ๋ง์ง๋ง์ผ๋ก Structural equality(๊ตฌ์กฐ ๋๋ฑ์ฑ)์ธ๋ฐ, ์ด๋ ๋ด๋ถ ๋ฉค๋ฒ ๋ณ์๊ฐ ๋์ผํ ๋ ๊ฐ์ ๊ฐ์ฒด๋ผ๊ณ ๋ณธ๋ค.
์ํฐํฐ, ์ฆ Reference Object๋ Identifier equality(์๋ณ์ ๋๋ฑ์ฑ)์ด๋ฉฐ, Value Object๋ tructural equality(๊ตฌ์กฐ ๋๋ฑ์ฑ)์ด๋ค.
Value Object๋ ๋ถ๋ณ ๊ฐ์ฒด๋ก
Value Object๋ ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค. ์์ผ๊น?
์ด๋ ๋ด๋ถ์์ ์ํ๋ฅผ ๋ณํ์์ผฐ์ ๋, ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์์ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.(Aliasing ๋ฌธ์ )
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Value Object๋ ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ฉฐ ์์ ํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ํด์ผ ํ๋ค. ์ด์ฐจํผ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค๋ฉด, ๊ธฐ์กด์ ์ฐ์ง ์๋ ๊ฐ์ฒด๋ GC์ ๋์์ด ๋๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ ํฌ๊ฒ ์๋ค.
์ฆ, Value Object๋ ๋ด๋ถ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด, ๊ธฐ์กด ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ฒ์ด ์๋๋ผ ์์ ํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๋ฐ๋ฉด, Reference Object๋ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํด์ผ ํ๋ ๊ฐ์ฒด์ด๋ค. ์์คํ ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ถ์ ํด์ผ ํ๊ธฐ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ๊ฒ์ด ์ณ์ง ์๋ค. ๋ง์ฝ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋, Reference Object๋ ๋ด๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ์ฌ์ผ ํ๋ค.
References
'๐ซ Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น(SOLID)์ด๋? (2) | 2024.01.13 |
---|---|
[Java] ์ผ๊ธ ์ปฌ๋ ์ ๊ณผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ์ ๋ํ์ฌ (2) | 2024.01.13 |
[Java] JUnit5 ์ฌ์ฉ๋ฒ ์์๋ณด๊ธฐ (0) | 2024.01.09 |
[Java] ๋ฉํฐ์ค๋ ๋์ ๋๊ธฐํ์ ๋ํด์ (1) | 2024.01.06 |
[Java] ๋๊ธฐ/๋น๋๊ธฐ & ๋ธ๋ญํน/๋ ผ๋ธ๋ญํน์ด๋? (0) | 2024.01.02 |