๐ ๋ชฉ์ฐจ.
11. ์์คํ
.์์คํ ์ ์๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ผ
.ํ์ฅ
.ํก๋จ ๊ด์ฌ์ฌ
.ํ ์คํธ ์ฃผ๋ ์์คํ ์ํคํ ์ฒ ๊ตฌ์ถ
.์์ฌ ๊ฒฐ์ ์ ์ต์ ํํ๋ผ
.๋ช ๋ฐฑํ ๊ฐ์น๊ฐ ์์ ๋ ํ์ค์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๋ผ
.์์คํ ์ ๋๋ฉ์ธ ํนํ ์ธ์ด๊ฐ ํ์ํ๋ค.
.๊ฒฐ๋ก
โ๏ธ ๋ด์ฉ.
11. ์์คํ
"๋ณต์ก์ฑ์ ์ฃฝ์์ด๋ค. ๊ฐ๋ฐ์์๊ฒ์ ์๊ธฐ๋ฅผ ์์๊ฐ๋ฉฐ, ์ ํ์ ๊ณํํ๊ณ ์ ์ํ๊ณ ํ ์คํธํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ค"
- ๋ ์ด ์ค์ง, Microsoft CTO
ํ๋์ ๋์๋ฅผ ํ ์ฌ๋์ด ๊ด๋ฆฌํ ์๋ ์๋ค. ๊ฐ์์ ์ญํ ์ ๋ง๋ ํ๊ณผ ์ฌ๋์ด ์์ด์ผ ์ ๋์๊ฐ๊ฒ ๋๋ค.
๋์๊ฐ ๋์๊ฐ๋ ๋ ๋ค๋ฅธ ์ด์ ๋ ์ ์ ํ ์ถ์ํ์ ๋ชจ๋ํ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ํฐ ๊ทธ๋ฆผ์ ์ดํดํ์ง ๋ชปํ์ฌ๋ ๊ฐ๊ฐ์ธ์ด ๊ด๋ฆฌํ๋ '๊ตฌ์ฑ'์์'๋ ํจ์จ์ ์ผ๋ก ๋์๊ฐ๋ค.
์ํํธ์จ์ด ํ๋ ๋์์ฒ๋ผ ๊ตฌ์ฑํ๋ค. ๊นจ๋ํ ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด ๋ฎ์ ์ถ์ํ ์์ค์์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ฌ์์ง๋ค.
์ด ์ฅ์์๋ ๋์ ์ถ์ํ ์์ค, ์ฆ ์์คํ ์์ค์์๋ ๊นจ๋ํจ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค.
.์์คํ ์ ์๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ผ
์ฐ์ ์ ์์ ์ฌ์ฉ๊ณผ ๋ค๋ฆ์ ๋ช ์ฌํ๋ค. ์ฆ ์ํํธ์จ์ด์์ ์์คํ ์ ์ค๋น ๊ณผ์ ๊ณผ ๋ฐํ์ ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์์ ๋จ๊ณ๋ ๊ด์ฌ์ฌ(Concern)๋ค. ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ๊ฐ์ฅ ์ค๋๋๊ณ ๊ฐ์ฅ ์ค์ํ ์ค๊ณ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค.
๋ถํํ๋ ๋๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๋จ๊ณ์์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ง ์๋๋ค. ๋ค์์ด ์ ํ์ ์ธ ์๋ค
public Service getService() {
if (service == null)
service = new MyServiceImpl(...); // ๋ชจ๋ ์ํฉ์ ์ ํฉํ ๊ธฐ๋ณธ๊ฐ์ธ๊ฐ?
return service;
}
์ ์ฝ๋๋ ์ด๊ธฐํ ์ง์ฐ(Lazy Initialization) ํน์ ๊ณ์ฐ ์ง์ฐ( Lazy Evaluation)์ด๋ผ๋ ๊ธฐ๋ฒ์ด๋ค.
์ฅ์
- ์ค์ ๋ก ํ์ํ ๋๊น์ง ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๋ ์๊ฐ์ด ๊ทธ๋งํผ ๋นจ๋ผ์ง๋ค.
- ์ด๋ค ๊ฒฝ์ฐ์๋ Null ์ด ๋ฐ์ํ์ง ์๋๋ค.
๋จ์
- ์์กด์ฑ์ด ์๊ธด๋ค.
getService ๋ฉ์๋๊ฐ MyServiceImpl์ (์์์ ์๋ต๋) ์์ฑ์ ์ธ์์ ๋ช ์์ ์ผ๋ก ์์กดํ๋ค.
๋ฐํ์ ๋ก์ง์์ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์์กด์ฑ์ ํด๊ฒฐํด์ผ ์ปดํ์ผ ๊ฐ๋ฅํ๋ค.
- ํ ์คํธ ๋ฌธ์ .
MyServiceImpl์ด ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด์ผ ๊ฒฝ์ฐ ๋จ์ ํ ์คํธ์์ getService ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ ์ ํ ํ ์คํธ ์ ์ฉ ๊ฐ์ฒด(Test Double์ด๋ Mock Object)๋ฅผ servie ํ๋์ ํ ๋นํด์ผ ํ๋ค. ๋ํ ๋ฐํ์ ๋ก์ง์ ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ์์ด ๋์ ํ์ (service๊ฐ null์ธ ๊ฒฝ๋ก์ null์ด ์๋ ๊ฒฝ๋ก ๋ฑ) ๋ชจ๋ ์คํ ๊ฒฝ๋ก๋ ํ ์คํธํด์ผ ํ๋ค.
์ฑ ์์ด ๋์ด๋ผ๋ ๋ง์ ์๊ฒ๋๋ง ๋จ์ผ ์ฑ ์ ์์น(SRP)์ ๊นฌ๋ค๋ ์๋ฏธ์ด๋ค.
- ์ํฉ์ ์ ํฉํ ๊ฐ์ฒด์ธ๊ฐ?.
getService ๋ฉ์๋๋ฅผ ํฌํจํ ํด๋์ค๊ฐ ์ ์ฒด ๋ฌธ๋งฅ์ ์ ํ์๊ฐ ์์๊น? ๊ณผ์ฐ ์ด ์์ ์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ง ์ ์๋ ์์๊น? ํ์ค์ ์ผ๋ก ํ ๊ฐ์ฒด ์ ํ์ด ๋ชจ๋ ๋ฌธ๋งฅ์ ์ ํฉํ ๊ฐ๋ฅ์ฑ์ด ์์๊น?
- ๋ชจ๋์ฑ์ ์ ์กฐํ๊ณ ๋๊ฐ ์ค๋ณต์ด ์ฌ๊ฐํ๋ค.
์ด๊ธฐํ ์ง์ฐ ๊ธฐ๋ฒ์ ํ ๋ฒ ์ ๋ ์ฌ์ฉํ๋ค๋ฉด ํฐ ๋ฌธ์ ๊ฐ ์๋๋ค. ํ์ง๋ง ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์ฒ๋ผ ์ข์ค๋ฌ์ด ์ค์ ๊ธฐ๋ฒ์ ์์๋ก ์ด์ฉํ๋ค. ๊ทธ๋์ ์ ๋ฐ์ ์ธ ์ค์ ๋ฐฉ์์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณณ๊ณณ์ ํฉ์ด์ ธ ์๋ค.
์ฒด๊ณ์ ์ด๊ณ ํํํ ์์คํ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ํํ ์ฐ๋ ์ข์ค๋ฝ๊ณ ์์ฌ์ด ๊ธฐ๋ฒ์ผ๋ก ๋ชจ๋์ฑ์ ๊นจ์๋ ์ ๋ ์ ๋๋ค.
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์์กด์ฑ์ ์ฐ๊ฒฐํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ค์ ๋ ผ๋ฆฌ๋ ์ผ๋ฐ ์คํ ๋ ผ๋ฆฌ์ ๋ถ๋ฆฌํด์ผ ๋ชจ๋์ฑ์ด ๋์์ง๋ค. ๋ํ ์ฃผ์ ์์กด์ฑ์ ํด์ํ๊ธฐ ์ํ ๋ฐฉ์, ์ฆ ์ ๋ฐ์ ์ด๋ฉฐ ์ผ๊ด์ ์ธ ๋ฐฉ์๋ ํ์ํ๋ค.
- Main ๋ถ๋ฆฌ
์์คํ ์์ฑ๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก, ์์ฑ๊ณผ ๊ด๋ จํ ์ฝ๋๋ ๋ชจ๋ main์ด๋ main์ด ํธ์ถํ๋ ๋ชจ๋๋ก ์ฎ๊ธฐ๊ณ , ๋๋จธ์ง ์์คํ ์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๊ณ ๋ชจ๋ ์์กด์ฑ์ด ์ฐ๊ฒฐ๋์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ์ด ํ๋ฆ์ main ํจ์์์ ์์คํ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๊ธด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋ง ํ ๋ฟ main์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์ ํ ๋ชจ๋ฅธ๋ค.
- ํฉํ ๋ฆฌ
๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ์ ํ ํ์๋ ์๊ธฐ๊ฒ ๋๋ค.
์๋ก ์ฃผ๋ฌธ์ฒ๋ฆฌ ์์คํ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ LineItem ์ธ์คํด์ค๋ฅผ ์์ฑํด Order์ ์ถ๊ฐํ๋ค. ์ด๋ Abstract Factory ํจํด์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ฉด LineItem์ ์์ฑํ๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ์ ํ์ง๋ง LineItem์ ์์ฑํ๋ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ฅธ๋ค.
- ์์กด์ฑ ์ฃผ์
์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)์ ์ ์ด ์ญ์ (Inversion of Control. IOC) ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ ๋ฉ์ปค๋์ฆ์ด๋ค.
์ ์ด ์ญ์ ์์๋ ํ ๊ฐ์ฒด๊ฐ ๋งก์ ๋ณด์กฐ ์ฑ ์์ ์๋ก์ด ๊ฐ์ฒด์๊ฒ ์ ์ ์ผ๋ก ๋ ๋๊ธด๋ค. ์๋ก์ด ๊ฐ์ฒด๋ ๋๊ฒจ๋ฐ์ ์ฑ ์๋ง ๋งก์ผ๋ฏ๋ก ๋จ์ผ ์ฑ ์ ์์น(SRP)์ ์งํค๊ฒ ๋๋ค. ์์กด์ฑ ๊ด๋ฆฌ ๋งฅ๋ฝ์์๋ ๊ฐ์ฒด๋ ์์กด์ฑ ์์ฒด๋ฅผ ์ธ์คํด์ค๋ก ๋ง๋๋ ์ฑ ์์ ์ง์ง ์๋๋ค. ๋์ ์ด๋ฐ ์ฑ ์์ ๋ค๋ฅธ '์ ๋ด' ๋ฉ์ปค๋์ฆ์ ๋๊ฒจ์ผ ํ๋ค. ๊ทธ๋ผ์ผ๋ก์จ ์ ์ด๋ฅผ ์ญ์ ํ๋ค.
์ด๊ธฐ ์ค์ ์ ์์คํ ์ ์ฒด์์ ํ์ํ๋ฏ๋ก ๋๊ฒ '์ฑ ์์ง' ๋ฉ์ปค๋์ฆ์ผ๋ก 'main' ๋ฃจํด์ด๋ ํน์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ค.
์์กด์ฑ ์ฃผ์ ๊ธฐ๋ฒ์ ์ด๊ธฐํ ์ง์ฐ์ผ๋ก ์ป๋ ์ฅ์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ๋๋ค์ DI ์ปจํ ์ด๋๋ ํ์ํ ๋๊น์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ , ๋๋ถ๋ถ ๊ณ์ฐ ์ง์ฐ์ด๋ ๋น์ทํ ์ต์ ํ์ ์ธ ์ ์๋๋ก ํฉํ ๋ฆฌ๋ฅผ ํธ์ถํ๊ฑฐ๋ ํ๋ฝ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ์ฆ, ๊ณ์ฐ ์ง์ฐ ๊ธฐ๋ฒ์ด๋ ์ด์ ์ ์ฌํ ์ต์ ํ ๊ธฐ๋ฒ์์ ์ด๋ฐ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
.ํ์ฅ
'์ฒ์๋ถํฐ ์ฌ๋ฐ๋ฅด๊ฒ' ์์คํ ์ ๋ง๋ค ์ ์๋ค๋ ๋ฏฟ์์ ๋ฏธ์ ์ด๋ค. ๋์ ์ฐ๋ฆฌ๋ ์ฃผ์ด์ง ์ฌ์ฉ์ ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ๊ตฌํํด์ผ ํ๋ค. ๋ด์ผ์ ์๋ก์ด ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๋ฉด ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ณต์ ์ด๊ณ ์ ์ง์ ์ธ ์ ์์ผ ๋ฐฉ์์ ํต์ฌ์ด๋ค. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ, ๋ฆฌํํฐ๋ง, (TDD + ๋ฆฌํฉํฐ๋ง์ผ๋ก ์ป์ด์ง๋) ๊นจ๋ํ ์ฝ๋๋ ์ฝ๋ ์์ค์์ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
์ํํธ์จ์ด ์์คํ ์ ๋ฌผ๋ฆฌ์ ์ธ ์์คํ ๊ณผ ๋ค๋ฅด๋ค. ๊ด์ฌ์ฌ๋ฅผ ์ ์ ํ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ๋ค๋ฉด ์ํํธ์จ์ด ์ํคํ ์ฒ๋ ์ ์ง์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋ค.
.ํก๋จ ๊ด์ฌ์ฌ
AOP์์ ๊ด์ (aspect)์ด๋ผ๋ ๋ชจ๋ ๊ตฌ์ฑ ๊ฐ๋ ์ "ํน์ ๊ด์ฌ์ฌ๋ฅผ ์ง์ํ๋ ค๋ฉด ์์คํ ์์ ํน์ ์ง์ ๋ค์ด ๋์ํ๋ ๋ฐฉ์์ ์ผ๊ด์ฑ ์๊ฒ ๋ฐ๊ฟ์ผ ํ๋ค"๋ผ๊ณ ๋ช ์ํ๋ค.
์์์ฑ์ ์๋ก ๋ค๋ฉด, ํ๋ก๊ทธ๋๋จธ๋ ์์์ ์ผ๋ก ์ ์ฅํ ๊ฐ์ฒด์ ์์ฑ์ ์ ์ธํ ํ ์์์ฑ ํ๋ ์์ํฌ์ ์์ํ๋ค. ๊ทธ๋ฌ๋ฉด AOP ํ๋ ์ ์ํฌ๋ ๋์ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ์ํ๋ก ๋์ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ค. ์๋ฐ์์ ์ฌ์ฉํ๋ ๊ด์ ํน์ ๊ด์ ๊ณผ ์ ์ฌํ ๋ฉ์ปค๋์ฆ ์ธ ๊ฐ(Java Proxy, ์์ ์๋ฐ AOP ํ๋ ์์ํฌ, AspectJ ๊ด์ )๊ฐ ์๋ค.
.ํ ์คํธ ์ฃผ๋ ์์คํ ์ํคํ ์ฒ ๊ตฌ์ถ
๊ด์ ์ผ๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ ์๋ ฅ์ด ๋ง๊ฐํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ POJO๋ก ์์ฑํ ์ ์๋ค๋ฉด, ์ฆ ์ฝ๋ ์์ค์์ ์ํคํ ์ฒ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ฉด, ์ง์ ํ ํ ์คํธ ์ฃผ๋ ์ํคํ ์ฒ ๊ตฌ์ถ์ด ๊ฐ๋ฅํด์ง๋ค. ํ์์ ๋ฐ๋ผ ์๋ก์ด ๊ธฐ์ ์ ์ฑํํด ๋จ์ํ ์ํคํ ์ฒ๋ฅผ ๋ณต์กํ ์ํคํ ์ฒ๋ก ํค์๊ฐ ์๋ ์๋ค.
์ต์ ์ ์์คํ ๊ตฌ์กฐ๋ ๊ฐ๊ธฐ POJO ๊ฐ์ฒด๋ก ๊ตฌํ๋๋ ๋ชจ๋ํ ๋ ๊ด์ฌ์ฌ ์์ญ(๋๋ฉ์ธ)์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๋ ๊ฒ ํด๋น ์์ญ ์ฝ๋์ ์ต์ํ์ ์ํฅ์ ๋ฏธ์น๋ ๊ด์ ์ด๋ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ํตํฉํ๋ค. ์ด๋ฐ ๊ตฌ์กฐ ์ญ์ ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์คํธ ์ฃผ๋ ๊ธฐ๋ฒ์ ์ ์ฉํ ์ ์๋ค.
.์์ฌ ๊ฒฐ์ ์ ์ต์ ํํ๋ผ
๋ชจ๋์ ๋๋๊ณ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ง์ฝ์ ์ธ ๊ด๋ฆฌ์ ๊ฒฐ์ ์ด ๊ฐ๋ฅํด์ง๋ค. ์ด๋ฌํ ๋ชจ๋ ๊ฒฐ์ ์ ํ ์ฌ๋์ด ๋ด๋ฆฌ๊ธฐ๋ ์ด๋ ต๋ค.
๋ฐ๋ผ์ ๊ฐ์ฅ ์ ํฉํ ์ฌ๋์๊ฒ ์ฑ ์์ ๋งก๊ธฐ๋ ๊ฒ ๊ฐ์ฅ ์ข๋ค. ์ฐ๋ฆฌ๋ ๋๋๋ก ๊ฐ๋ฅํ ๋ง์ง๋ง ์๊ฐ๊น์ง ๊ฒฐ์ ์ ๋ฏธ๋ฃจ๋ ๋ฐฉ๋ฒ์ด ์ต์ ์ด๋ผ๋ ์ฌ์ค์ ์๊ณ ๋ ํ๋ค. ๊ฒ์ผ๋ฅด๊ฑฐ๋ ๋ฌด์ฑ ์ํด์๊ฐ ์๋๋ผ ์ต๋ํ ์ ๋ณด๋ฅผ ๋ชจ์ ์ต์ ์ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด์์ด๋ค.
.๋ช ๋ฐฑํ ๊ฐ์น๊ฐ ์์ ๋ ํ์ค์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๋ผ
EJB2๋ ๋จ์ง ํ์ค์ด๋ผ๋ ์ด์ ๋ก ๋ง์ด ์ฌ์ฉํ๊ณค ํ๋ค. ํ์ง๋ง ํ์ค์ ์ง์ฐฉํ๋ ๋ฐ๋์ ๊ณ ๊ฐ ๊ฐ์น๊ฐ ๋ท์ ์ผ๋ก ๋ฐ๋ ค๋ ์ฌ๋ก๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
ํ์ค์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ด ์ฝ๊ณ , ๊ด๋ จ ๊ฒฝํ์ด ์๋ ์ฌ๋์ ๊ตฌํ๊ธฐ ์ฝ๊ณ ๋ฑ๋ฑ ๋ค์ํ ์ฅ์ ์ด ์์ง๋ง. ๋๋ก๋ ์ด๋ฌํ ํ์ค ๋๋ฌธ์ ์ ์ ํ ๋ชฉ์ ์ ์์ด๋ฒ๋ฆฌ๊ณค ํ๋ค.
.์์คํ ์ ๋๋ฉ์ธ ํนํ ์ธ์ด๊ฐ ํ์ํ๋ค.
DSL์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ ์ธ์ด๋ ํ์ค ์ธ์ด๋ก ๊ตฌํํ API๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ข์ DSL์ ๋๋ฉ์ธ ๊ฐ๋ ๊ณผ ๊ทธ ๊ฐ๋ ์ ๊ตฌํํ ์ฝ๋ ์ฌ์ด์ ์กด์ฌํ๋ '์์ฌ์ํต ๊ฐ๊ทน'์ ์ค์ฌ์ค๋ค. ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ๊ฐ ์ฌ์ฉํ๋ ์ธ์ด๋ก ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด ๋๋ฉ์ธ์ ์๋ชป ๊ตฌํํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ ๋ค.
ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด ๊ณ ์ฐจ์ ์ ์ฑ ์์ ์ ์ฐจ์ ์ธ๋ถ์ฌํญ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ์ถ์ํ ์์ค๊ณผ ๋ชจ๋ ๋๋ฉ์ธ์ POJO๋ก ํํํ ์ ์๋ค.
.๊ฒฐ๋ก
์์คํ ์ญ์ ๊นจ๋ํด์ผ ํ๋ค. ๋ชจ๋ ์ถ์ํ ๋จ๊ณ์์ ์๋๋ ๋ช ํํ ํํํด์ผ ํ๋ค. ์์คํ ์ด๋ ๊ฐ๋ณ ๋ชจ๋์ด๋ ๊ฐ์ฅ ๋จ์ํ ์๋จ์ ์ฌ์ฉํด์ผ ํ๋ค.
๐ ๋๋์ .
- ๊นจ๋ํ ์ํคํ ์ฒ ๊ตฌ์ฑ์ ์ํด ๋ ธ๋ ฅํด์ผ ํ๋ค.
- ๊ด์ ํน์ ๊ด์ ๊ณผ ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด ๊ตฌํ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์.
- '๊ฐ์ฅ ๋จ์ํ๊ฒ!' ํญ์ ์๊ฐํ๋ฉฐ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ์ ํ์.
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 3] 13. ๋์์ฑ (0) | 2022.08.10 |
---|---|
[Study][CleanCode - 3] 12. ์ฐฝ๋ฐ์ฑ (0) | 2022.08.04 |
[Study][CleanCode - 3] 10. ํด๋์ค (0) | 2022.08.01 |
[Study][CleanCode - 2] 9. ๋จ์ ํ ์คํธ (0) | 2022.07.17 |
[Study][CleanCode - 2] 8. ๊ฒฝ๊ณ (0) | 2022.07.16 |