6์ฅ์์๋ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค(๊ฐ์ฒด๊ฐ ์์ ํ๋ ๋ฉ์์ง)๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ค๊ณ ์์น์ ์๋ ค์ค๋ค.
- ๋๋ฏธํฐ ๋ฒ์น
- ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ
- ์๋๋ฅผ ๋๋ฌ๋ด๋ ์ธํฐํ์ด์ค
- ๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น
์ค๊ณ ์์น์ ์กฐํฉํ๋ฉด ์ง๊ด์ ์ด๊ณ , ์์ธก ๊ฐ๋ฅํ๋ฉฐ, ์ ์ฐํ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ฉ์์ง = ์คํผ๋ ์ด์ ๋ช + ์ธ์
๋ฉ์์ง ์ ์ก = ์คํผ๋ ์ด์ ๋ช + ์ธ์ + ๋ฉ์์ง ์์ ์
์๊ทธ๋์ฒ = ์คํผ๋ ์ด์ (๋ฉ์๋)๋ช + ํ๋ผ๋ฏธํฐ๋ชฉ๋ก
๋๋ฏธํฐ ๋ฒ์น
ํ๋ ฅํ๋ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ ๊ฒฐํฉ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ค๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์๋ ์์น
-> ์ (.)์ ํ๋๋ง ์ฌ์ฉํ์ use only one dot
// ์์ข์ ์ (train wreck)
screening.getMovie().getDiscountConditions();
๋ด๋ถ ์ํ๋ฅผ ๋ฌป๋ ์คํผ๋ ์ด์ ์ ํ๋์ ์์ฒญํ๋ ์คํผ๋ ์ด์ ์ผ๋ก ๋ฐ๊พธ์.
๊ทธ๋ฆฌ๊ณ ์ธํฐํ์ด์ค๋ ์ด๋ป๊ฒ ํ๋์ง๊ฐ ์๋๋ผ ๋ฌด์์ ํ๋์ง ์๊ธฐํด์ผ ํ๋ค.
// ์ ์ด ์ฐ๋ฌ์ ๋์ ์์ข์ ์์ฒ๋ผ ๋ณด์ด์ง๋ง IntStream์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ
// ์ธ๋ถ๋ก ๋
ธ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฏธํฐ ๋ฒ์น์ ์๋ฐํ ๊ฒ์ ์๋๋ค.
IntStream.of(1, 15, 20, 3, 9).filter(x -> x > 10).distinct().count();
๋๋ฏธํฐ ๋ฒ์น์ ์๋ฐ ์ฌ๋ถ๋ ๋ฌป๋ ๋์์ด ๊ฐ์ฒด์ธ์ง, ์๋ฃ ๊ตฌ์กฐ์ธ์ง์ ๋ฌ๋ ค์๋ค.
- ๊ฐ์ฒด๋ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ์จ๊ฒจ์ผ ํ๊ณ
- ์๋ฃ ๊ตฌ์กฐ๋ ๋ด๋ถ๋ฅผ ๋ ธ์ถํด์ผ ํ๋ค.
๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น
Command-Query Seperation - ์ง๋ฌธ์ด ๋ต๋ณ์ ์์ ํด์๋ ์๋๋ค.
๋ฃจํด(routine) ์ ์ด๋ค ์ ์ฐจ๋ฅผ ๋ฌถ์ด ํธ์ถ ๊ฐ๋ฅํ๋๋ก ์ด๋ฆ์ ๋ถ์ฌํ ๊ธฐ๋ฅ ๋ชจ๋์ด๊ณ
๋ฃจํด์ ๋ค์ ํ๋ก์์ (procedure)์ ํจ์(function)๋ก ๊ตฌ๋ถ๋๋ค.
๋ฃจํด
- ํ๋ก์์ (๋ช ๋ น/command) :
-> ๋ถ์ํจ๊ณผ(side effect)๋ฅผ ๋ฐ์์ํฌ ์ ์์ง๋ง ๊ฐ์ ๋ฐํํ ์ ์๋ค.
-> ๊ฐ์ฒด์ ์ํ๋ฅผ ์์ ํ๋ ์คํผ๋ ์ด์ (๋ฐํ๊ฐ์์)
- ํจ์(์ฟผ๋ฆฌ/query) :
-> ๊ฐ์ ๋ฐํํ ์ ์์ง๋ง ๋ถ์ํจ๊ณผ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
-> ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ์คํผ๋ ์ด์ (์ํ ๋ณ๊ฒฝํ ์ ์์)
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ(imperative programming)
- ๋ถ์ํจ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ๋ก๊ทธ๋๋ฐ
- ๋๋ถ๋ถ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ค์ด ์ฌ๊ธฐ์ ์ํจ -> ๋ฉ์์ง์ ์ํ ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ์ ์ง์คํ๊ธฐ ๋๋ฌธ์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ(functional programming)
- ๋ถ์ํจ๊ณผ๊ฐ ์กด์ฌํ์ง ์๋ ์ํ์ ์ธ ํจ์์ ๊ธฐ๋ฐํจ.
- ์ฐธ์กฐ ํฌ๋ช ์ฑ(referential transparency)์ ์ฅ์ ๊ทน๋ํ ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์คํ๊ฒฐ๊ณผ๋ฅผ ์ดํดํ๊ณ ์์ธกํ๊ธฐ ์ฌ์
- ํ๋์จ์ด์ ๋ฐ๋ฌ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ์ค์ํด์ง ์ต๊ทผ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ธฐ๊ฐ ๋ ๋๋ค.
์ง๊ธ ํ๊ณ ์๋ ๊ฐ์ธ ํ๋ก์ ํธ๋ ํด๋๊ตฌ์กฐ๋ฅผ DDD ๋ฐฉ์์ผ๋ก ๋๋ฉ์ธ์ command๋ query๋ก ๋๋์ด์ ์์ฑํ๊ณ ์๋ค. ๋จ์ํ ์กฐํ๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋๊น query๋ฅผ ๋ฐ๋ก ๋บ๋ค๊ณ ์๊ฐํ๋๋ฐ, ๊ฐ์ฒด์งํฅ์ ์ธ ๊ด์ ์์ ์ํ๋ฅผ ์์ ํ๋ ์คํผ๋ ์ด์ ๊ณผ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ์คํผ๋ ์ด์ ์ ๊ตฌ๋ถํด ๋์ผ๋ฉด ๋ฒ๊ทธ๊ฐ ์ ๊ณ , ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ฉฐ, ์ฟผ๋ฆฌ์ ์์์ ๋ฐ๋ผ ์คํ๊ฒฐ๊ณผ๊ฐ ๋ณํ์ง ์๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์ ์ฐธ์กฐ ํฌ๋ช ์ฑ์ ์ฅ์ ์ ์กฐ๊ธ์ด๋๋ง ๋๋ฆด ์ ์๋ค๊ณ ํ๋ค.
command์ query์ ๋ป์ ์ ํํ ์ ์ ์๊ฒ ๋์ด์ ์ด๋ฒ ์ฅ์ ์ข ๋ ์ฌ๋ฐ๊ฒ ์ฝ์ ๊ฒ ๊ฐ๋ค.
// TODO
๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ? ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ธ๊ฐ?
'์คํฐ๋ > ์ค๋ธ์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ธ์ ํธ] 8์ฅ '์์กด์ฑ ๊ด๋ฆฌํ๊ธฐ' (0) | 2022.12.02 |
---|---|
[์ค๋ธ์ ํธ] 7์ฅ '๊ฐ์ฒด ๋ถํด' (0) | 2022.11.25 |
[์ค๋ธ์ ํธ] 5์ฅ '์ฑ ์ ํ ๋นํ๊ธฐ' (0) | 2022.11.11 |
[์ค๋ธ์ ํธ] 4์ฅ '์ค๊ณ ํ์ง๊ณผ ํธ๋ ์ด๋์คํ' (0) | 2022.11.04 |
[์ค๋ธ์ ํธ] 3์ฅ '์ญํ , ์ฑ ์, ํ๋ ฅ' (0) | 2022.10.27 |
๋๊ธ