Bibi's DevLog ๐ค๐
[Java] Value Object (VO) ๊ฐ ๊ฐ์ฒด ๋ณธ๋ฌธ
์๋ฐ Value Object (VO) ๊ฐ ๊ฐ์ฒด
ValueObject๋?์ ๋ณด๊ณ ๊ณต๋ถํ์ต๋๋ค.
ValueObject๋ ๊ฐ์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ๊ฐ์ฒด์ด๋ค.
์ ํํ ์๋ฏธ๋ Value Object Pattern ์ผ๋ก, ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒ๋ผ ์ธ ์ ์๋ค.
Primitive Obsession - ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๊ธฐ๋ณธํ์ ์ ์ฐ๋ ๋์ ๊ด์ต.
๊ฐ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๊ธฐ ์ํด์๋ ๊ธฐ์กด ์๋ฃํ์ ์ฌ์ฉํ๋ ๊ฒ ์๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ํ ์๋ฃํ์ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. Value Object๋ ๊ทธ ์ค ํ๋์ด๋ค.
Value Object ๊ฐ ๊ฐ์ฒด ๋..
-
๊ฐ์ฒด์ ์ธ์คํด์ค๋ณ์๊ฐ ์์ฑ์๋ฅผ ํตํด ์ค์ ๋ ํ์๋ ๊ฒฐ์ฝ ๋ณํ์ง ์์์ ๋ณด์ฅํจ.
-
(๊ฐ์ฒด์งํฅ์ ์ผ๋ก) uniqueํ ๊ตฌ๋ถ์๊ฐ ์๋ค.
๊ฐ์ฒด๋ฅผ ์๋ณํ๋ ๊ฒ ๋ฌด์๋ฏธํ๊ธฐ ๋๋ฌธ. (๋จ์ํ ''๊ฐ''์ด๊ธฐ ๋๋ฌธ์.)- ์ผ๋ฐ ๊ฐ์ฒด๋ ๊ฐ๊ฐ uniqueํ ๊ตฌ๋ถ์(ํด์์ฝ๋, ์ฆ ์ฃผ์๊ฐ ๋ฑ)๊ฐ ์๋ค.
-
value๋ฅผ ๋ด๋ ๊ฒ ์ฃผ ๋ชฉ์ ์ด๋ค. value๋ ์ํ๊ฐ ๋ณํ์ง ์๋๋ค.
๊ฐ์ฒด๋ฅผ Value Object๋ก ๋ง๋ค๊ธฐ ์ํ ์ฒดํฌ๋ฆฌ์คํธ
- private ์์ฑ์ ๊ฐ์ง๋ฉฐ ๋ค๋ฅธ Value Object์ ๋น๊ตํ ์ ์๋ค
- ๋ถ๋ณํ๋ฉฐ ์์ ์(setter)๊ฐ ์๋ค
- ๋๋ฉ์ธ์ ์๋ฏธ๋ก ์ ๋ฐ์ํ๋ค
- ๋ฐํ์ ๋์ ์ ๋ณด์ ํ๋ฆ๊ณผ ๋ณํ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค
- default ๋ฐ ์ธ๋ชจ์๋ getter๊ฐ ์๋ค
Value Object์ ํน์ฑ
1.๋ถ๋ณ์ฑ Immutability - ์์ ์(setter)๊ฐ ์๋ค
Value Object๋ ๋ถ๋ณ์ฑ์ ์ง๋ ์ผ ํ๋ค.
์์ฑ์๋ฅผ ํตํด ํ ๋ฒ ์์ฑ๋๋ฉด ์ดํ ๋ด๋ถ ๊ฐ์ ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
์ฆ, VO๊ฐ์ฒด๋ ์ฌ์ฉ ๋์ค์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- setter๋ฅผ ํ์ฉํ์ง ์๋๋ค.
- GC์ ์ํค ํ๊ธฐ๋ ๋ ๊น์ง ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๋ค.
๋ถ๋ณ์ฑ์ผ๋ก ์ป๋ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1.Reference(์ฐธ์กฐ)๋ก ๊ณต์ ํ ์ ์๋ค.
- side effect๋ฅผ ํผํ๋ฉด์, ๋์์ ์ฝ๋์ ๋ณต์ก์ฑ๊ณผ ๋ถํ๋ฅผ ๊ฐ์์ํจ๋ค.
- ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ทธ ์ฅ์ ์ด ๋๋ ทํด์ง๋ค.
2.๋ช ํํ ์ด๋ฆ๊ณผ ๋์์ ๊ฐ์ง๋ค.
์ด๋ฅผ ์ํด ์๋ ๊ท์น์ ์งํค๋ฉฐ VO๋ฅผ ์์ฑํด์ผ ํ๋ค.
- VO์ ์ด๊ธฐ ํด๋์ค์๋ ์์ฑ์์ private ์ธ์คํด์ค๋ณ์๋ง ์์ด์ผ ํ๋ค.
- VO๊ฐ ์ธ์ ์ฌ์ฉ๋ ์ง ์ดํด๋ ๋๋ง ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.
ํนํ, ๋ฌด์๋ฏธํ getter ๋ฉ์๋๋ฅผ VO์ ์ถ๊ฐํ์ง ์๋๋ค.
๋, ์ด๋ฅผ ์ํด ์๋ ๊ท์น์ ์งํค๋ฉฐ VO๋ฅผ ์กฐ์ํด์ผ ํ๋ค.
- VO์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋๋ ์์ฑ์ ๋๋ static ๋ฉ์๋๋ง์ ์ฌ์ฉํ๋ค.
- ํ์ฌ ๊ฐ์ฒด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ๋ค๋ฅธ ์ ํ์ผ๋ก ๋ณํํ๋ค.
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ํ์ฉํด ์์ฑํ๋ค (private ์์ฑ์)
2.value equality ๊ฐ ๋๋ฑ์ฑ - ๋ด๋ถ ๊ฐ ๋๋ฑ์ฑ ๊ฒ์ฌ
VO๋ ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
๊ฐ๊ฐ์ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๋ VO๊ฐ์ฒด๋ ๋์ผํ๋ค๊ณ ํ๋จํด์ผ ํ๋ค.
value equality ๊ฐ ๋๋ฑ์ฑ ์ด๋?
: ๋ด๋ถ ๊ฐ์ด ๋ชจ๋ ๊ฐ๊ฐ ๋์ผํ๋ค๋ฉด, ๋ ๊ฐ์ฒด๋ ๋์ผํ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
๋ด๊ฐ ๊ฐ์ง 1000์๊ณผ ์น๊ตฌ๊ฐ ๊ฐ์ง 1000์์ ๋ ๋ค ๋๊ฐ์ 1000์์ด๋ค.
์ด๋ ๋ด 1000์๊ณผ ์น๊ตฌ์ 1000์์ด ๊ฐ์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ด ๊ตฌ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋, ๋ 1000์์ Value Object๋ผ๊ณ ๋งํ ์ ์๋ค.
๋๋ฑ์ฑ ๊ฒ์ฌ
: ๋ด๋ถ ๊ฐ์ด ๊ฐ๊ฐ ๋ชจ๋ ๋์ผํ์ง๋ฅผ ํ์ธํ์ฌ ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ์ง(๋๋ฑ์ฑ์ ๊ฐ์ง๋์ง) ๊ฒ์ฌํ๋ ๊ฒ.
๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ (==
์ equals()
)
-
๋์ผ์ฑ identity
: ์๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์์ง ํ๋จํ ์ ์๋ ์ฑ์ง.
๋ ์ธ์คํด์ค์ ๊ฐ์ด ๊ฐ์๋ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค๋ผ๋ฉด ๋์ผ์ฑ์ด ์๋ค๊ณ ํ๋จํ๋ค.- ์๋ฅผ ๋ค์ด
==
์ฐ์ฐ์๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.==
๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ด ๊ฐ์์ง๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ฅผ ๋ค์ด
-
๋๋ฑ์ฑ equality
: ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๊ฐ์ด ๊ฐ์์ง ํ๋จํ ์ ์๋ ์ฑ์ง.
๋ ์ธ์คํด์ค๊ฐ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค๋ผ๋ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๋๋ฑ์ฑ์ด ์๋ค๊ณ ํ๋จํ๋ค.- ์๋ฅผ ๋ค์ด
Object
์equals()
๋ฉ์๋๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.equals()
๋ ๊ฐ์ฒด์ ๊ฐ์ด ๊ฐ์์ง๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ฅผ ๋ค์ด
3.self validation ์๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ - ์์ฑ์์์ ์ ํจ์ฑ์ ํ์ธ(validate)
VO๋ ์ ํจํ์ง ์์ ๊ฐ์ผ๋ก ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
์ฆ, ๋ชจ๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์์ฑ ์๊ฐ์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
- VO์ ์์ฑ์ ๋จ๊ณ๋ถํฐ ๊ฐ์ ์ ํจ์ฑ์ ํ์ธํด์ผ ํ๋ค.
- ๊ฐ์ฒด์ ์ธ์คํด์ค์
if
๊ฐ ์กด์ฌํด์ ์ ๋๋ค. - ๋ช ์์ ์ผ๋ก ์ ์ฝ ์กฐ๊ฑด์ ํํํ ์ ์์ด์ผ ํ๋ค.
'๐ฅ BE ๋ฐฑ์๋ > Java ์๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] StringBuffer, StringBuilder ๊ทธ๋ฆฌ๊ณ String / StringBuffer ๊ฐ๋ ๊ณผ ์ฌ์ฉ / Buffer์ ๊ฐ๋ (0) | 2021.02.22 |
---|---|
[Java] try-with-resources ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ (0) | 2021.02.22 |
[Java] enum (์ด๊ฑฐํ) (0) | 2021.02.18 |
[Java] final (ํด๋์ค, ๋ฉ์๋, ๋ณ์, ์ธ์คํด์ค๋ณ์) (0) | 2021.02.18 |
[Java] this์ this() (0) | 2021.02.18 |