๐ญ Chapter 11: ์์คํ
๋ณต์ก์ฑ์ ์ฃฝ์์ด๋ค. ๊ฐ๋ฐ์์๊ฒ์ ์๊ธฐ๋ฅผ ์์๊ฐ๋ฉฐ, ์ ํ์ ๊ณํํ๊ณ ์ ์ํ๊ณ ํ ์คํธํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
๐ ์์คํ ์ ์๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ผโ
์ฐ์ ์ ์์ ์ฌ์ฉ๊ณผ ์์ฃผ ๋ค๋ฅด๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ๋ค.
์ํํธ์จ์ด ์์คํ ์ (์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์์กด์ฑ์ ์๋ก '์ฐ๊ฒฐ'ํ๋) ์ค๋น ๊ณผ์ ๊ณผ (์ค๋น ๊ณผ์ ์ดํ์ ์ด์ด์ง๋) ๋ฐํ์ ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์์ ๋จ๊ณ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ด์ผ ํ ๊ด์ฌ์ฌ๋ค. ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์ฐ๋ฆฌ ๋ถ์ผ์์ ๊ฐ์ฅ ์ค๋๋๊ณ ๊ฐ์ฅ ์ค์ํ ์ค๊ณ ๊ธฐ๋ฒ ์ค ํ๋๋ค.
๋ถํํ๋ ๋๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๋จ๊ณ๋ผ๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ง ์๋๋ค. ์ค๋น ๊ณผ์ ์ฝ๋๋ฅผ ์ฃผ๋จน๊ตฌ๊ตฌ์์ผ๋ก ๊ตฌํํ ๋ฟ๋ง ์๋๋ผ ๋ฐํ์ ๋ก์ง๊ณผ ๋ง๊ตฌ ๋ค์๋๋ค. ๋ค์์ด ์ ํ์ ์ธ ์๋ค.
public Service getService() {
if (service == null)
service = new MyServiceImpl(...); // ๋ชจ๋ ์ํฉ์ ์ ํฉํ ๊ธฐ๋ณธ๊ฐ์ผ๊น?
return service;
}
์ด๊ฒ์ด ์ด๊ธฐํ ์ง์ฐ ํน์ ๊ณ์ฐ ์ง์ฐ์ด๋ผ๋ ๊ธฐ๋ฒ์ด๋ค. ์ฅ์ ์ ์ฌ๋ฌ ๊ฐ์ง๋ค. ์ฐ์ , ์ค์ ๋ก ํ์ํ ๋๊น์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ํ์ํ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํ๋ ์๊ฐ์ด ๊ทธ๋งํผ ๋นจ๋ผ์ง๋ค. ๋์งธ, ์ด๋ค ๊ฒฝ์ฐ์๋ null
ํฌ์ธํฐ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
ํ์ง๋ง getService
๋ฉ์๋๊ฐ MyServiceImpl
๊ณผ ์์ฑ์ ์ธ์์ ๋ช
์์ ์ผ๋ก ์์กดํ๋ค. ๋ฐํ์ ๋ก์ง์์ MyServiceImpl
๊ฐ์ฒด๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์์กด์ฑ์ ํด๊ฒฐํ์ง ์์ผ๋ฉด ์ปดํ์ผ์ด ์ ๋๋ค.
ํ
์คํธ๋ ๋ฌธ์ ๋ค. MyServiceImpl
์ด ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด๋ผ๋ฉด ๋จ์ ํ
์คํธ์์ getService
๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ ์ ํ ํ
์คํธ ์ ์ฉ ๊ฐ์ฒด๋ฅผ service
ํ๋์ ํ ๋นํด์ผ ํ๋ค. ๋ํ ์ผ๋ฐ ๋ฐํ์ ๋ก์ง์๋ค ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ์์ธ๋์ ํ์ ๋ชจ๋ ์คํ ๊ฒฝ๋ก๋ ํ
์คํธํด์ผ ํ๋ค. ์ฑ
์์ด ๋์ด๋ผ๋ ๋ง์ ๋ฉ์๋๊ฐ ์์
์ ๋ ๊ฐ์ง ์ด์ ์ํํ๋ค๋ ์๋ฏธ๋ค. ์ฆ, ์๊ฒ๋๋ง ๋จ์ผ ์ฑ
์ ์์น(SRP)์ ๊นฌ๋ค๋ ๋ง์ด๋ค.
๋ฌด์๋ณด๋ค MyServiceImpl
์ด ๋ชจ๋ ์ํฉ์ ์ ํฉํ ๊ฐ์ฒด์ธ์ง ๋ชจ๋ฅธ๋ค๋ ์ฌ์ค์ด ๊ฐ์ฅ ํฐ ์ฐ๋ ค๋ค.
์ด๊ธฐํ ์ง์ฐ ๊ธฐ๋ฒ์ ํ ๋ฒ ์ ๋ ์ฌ์ฉํ๋ค๋ฉด ๋ณ๋ก ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์๋๋ค. ํ์ง๋ง ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์ฒ๋ผ ์ข์ค๋ฌ์ด ์ค์ ๊ธฐ๋ฒ์ ์์๋ก ์ฌ์ฉํ๋ค. ๊ทธ๋์ ์ ๋ฐ์ ์ธ ์ค์ ๋ฐฉ์์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณณ๊ณณ์ ํฉ์ด์ ธ ์๋ค. ๋ชจ๋์ฑ์ ์ ์กฐํ๋ฉฐ ๋๊ฐ ์ค๋ณต์ด ์ฌ๊ฐํ๋ค.
์ฒด๊ณ์ ์ด๊ณ ํํํ ์์คํ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ํํ ์ฐ๋ ์ข์ค๋ฝ๊ณ ์์ฌ์ด ๊ธฐ๋ฒ์ผ๋ก ๋ชจ๋์ฑ์ ๊นจ์๋ ์ ๋๋ก ์ ๋๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์์กด์ฑ์ ์ฐ๊ฒฐํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ค์ ๋ ผ๋ฆฌ๋ ์ผ๋ฐ ์คํ ๋ ผ๋ฆฌ์ ๋ถ๋ฆฌํด์ผ ๋ชจ๋์ฑ์ด ๋์์ง๋ค. ๋ํ ์ฃผ์ ์์กด์ฑ์ ํด์ํ๊ธฐ ์ํ ๋ฐฉ์, ์ฆ ์ ๋ฐ์ ์ด๋ฉฐ ์ผ๊ด์ ์ธ ๋ฐฉ์๋ ํ์ํ๋ค.
๐ Main ๋ถ๋ฆฌโ
์์คํ
์์ฑ๊ณผ ์์คํ
์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก, ์์ฑ๊ณผ ๊ด๋ จํ ์ฝ๋๋ ๋ชจ๋ main
์ด๋ main
์ด ํธ์ถํ๋ ๋ชจ๋๋ก ์ฎ๊ธฐ๊ณ , ๋๋จธ์ง ์์คํ
์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๊ณ ๋ชจ๋ ์์กด์ฑ์ด ์ฐ๊ฒฐ๋์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ์ด ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ฝ๋ค. main
ํจ์์์ ์์คํ
์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ธด๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ฟ์ด๋ค. main
๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ด์ ํ์๋ ์์กด์ฑ ํ์ดํ์ ๋ฐฉํฅ์ ์ฃผ๋ชฉํ๋ค. ๋ชจ๋ ํ์ดํ๊ฐ main
์ชฝ์์ ์ ํ๋ฆฌ์ผ์ด์
์ชฝ์ผ๋ก ํฅํ๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์
์ main
์ด๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์ ํ ๋ชจ๋ฅธ๋ค๋ ๋ป์ด๋ค. ๋จ์ง ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ ์ ํ ์์ฑ๋์๋ค๊ณ ๊ฐ์ ํ๋ค.
๐ ์์กด์ฑ ์ฃผ์ โ
์ฌ์ฉ๊ณผ ์ ์์ ๋ถ๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ ํ๋๊ฐ ์์กด์ฑ ์ฃผ์
(DI)์ด๋ค. ์์กด์ฑ ์ฃผ์
์ ์ ์ด ์ญ์ (IoC) ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ ์ด ์ญ์ ์์๋ ํ ๊ฐ์ฒด๊ฐ ๋งก์ ๋ณด์กฐ ์ฑ
์์ ์๋ก์ด ๊ฐ์ฒด์๊ฒ ์ ์ ์ผ๋ก ๋ ๋๊ธด๋ค. ์๋ก์ด ๊ฐ์ฒด๋ ๋๊ฒจ๋ฐ์ ์ฑ
์๋ง ๋งก์ผ๋ฏ๋ก ๋จ์ผ ์ฑ
์ ์์น์ ์งํค๊ฒ ๋๋ค. ์์กด์ฑ ๊ด๋ฆฌ ๋งฅ๋ฝ์์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ ๋ด ๋ฉ์ปค๋์ฆ์ ๋๊ฒจ์ผ๋ง ํ๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ ์ด๋ฅผ ์ญ์ ํ๋ค. ์ด๊ธฐ ์ค์ ์ ์์คํ
์ ์ฒด์์ ํ์ํ๋ฏ๋ก ๋๊ฐ ์ฑ
์์ง ๋ฉ์ปค๋์ฆ์ผ๋ก main
๋ฃจํด์ด๋ ํน์ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ค.
์ง์ ํ ์์กด์ฑ ์ฃผ์ ์ ํด๋์ค๊ฐ ์์กด์ฑ์ ํด๊ฒฐํ๋ ค ์๋ํ์ง ์๋๋ค. ํด๋์ค๋ ์์ ํ ์๋์ด๋ค. ๋์ ์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ์ ๋ฉ์๋๋ ์์ฑ์ ์ธ์๋ฅผ ์ ๊ณตํ๋ค.
๋๋ค์ DI ์ปจํ ์ด๋๋ ํ์ํ ๋๊น์ง๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ , ๋๋ถ๋ถ์ ๊ณ์ฐ ์ง์ฐ์ด๋ ๋น์ทํ ์ต์ ํ์ ์ธ ์ ์๋๋ก ํฉํ ๋ฆฌ๋ฅผ ํธ์ถํ๊ฑฐ๋ ํ๋ก์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ์ฆ, ๊ณ์ฐ ์ง์ฐ ๊ธฐ๋ฒ์ด๋ ์ด์ ์ ์ฌํ ์ต์ ํ ๊ธฐ๋ฒ์์ ์ด๋ฐ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
๐ ํ์ฅโ
์ฒ์๋ถํฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์คํ ์ ๋ง๋ค ์ ์๋ค๋ ๋ฏฟ์์ ๋ฏธ์ ์ด๋ค. ๋์ ์ ์ฐ๋ฆฌ๋ ์ค๋ ์ฃผ์ด์ง ์ฌ์ฉ์ ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ๊ตฌํํด์ผ ํ๋ค. ๋ด์ผ์ ์๋ก์ด ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๋ฉด ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ณต์ ์ด๊ณ ์ ์ง์ ์ธ ์ ์์ผ ๋ฐฉ์์ ํต์ฌ์ด๋ค. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD), ๋ฆฌํฉํฐ๋ง, ๊นจ๋ํ ์ฝ๋๋ ์ฝ๋ ์์ค์์ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
์ํํธ์จ์ด ์์คํ ์ ๋ฌผ๋ฆฌ์ ์ธ ์์คํ ๊ณผ ๋ค๋ฅด๋ค. ๊ด์ฌ์ฌ๋ฅผ ์ ์ ํ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ๋ค๋ฉด ์ํํธ์จ์ด ์ํคํ ์ฒ๋ ์ ์ง์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋ค.
p.200 ~ p.209 ์ฐธ๊ณ โ
๐ ํ ์คํธ ์ฃผ๋ ์์คํ ์ํคํ ์ฒ ๊ตฌ์ถโ
๊ด์ ์ผ๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ ๊ทธ ์๋ ฅ์ด ๋ง๊ฐํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ POJO๋ก ์์ฑํ ์ ์๋ค๋ฉด, ์ฆ ์ฝ๋ ์์ค์์ ์ํคํ ์ฒ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ฉด, ์ง์ ํ ํ ์คํธ ์ฃผ๋ ์ํคํ ์ฒ ๊ตฌ์ถ์ด ๊ฐ๋ฅํด์ง๋ค.
์์ฃผ ๋จ์ํ๋ฉด์๋ ๋ฉ์ง๊ฒ ๋ถ๋ฆฌ๋ ์ํคํ ์ฒ๋ฅผ ์ํํธ์จ์ด ํ๋ก์ ํธ๋ฅผ ์งํํด ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ๋นจ๋ฆฌ ์ถ์ํ ํ, ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํ๋ฉฐ ์กฐ๊ธ์ฉ ํ์ฅํด๋๊ฐ๋ ๊ด์ฐฎ๋ค.
์ต์ ์ ์์คํ ๊ตฌ ์กฐ๋ ๊ฐ๊ธฐ POJO ๊ฐ์ฒด๋ก ๊ตฌํ๋๋ ๋ชจ๋ํ๋ ๊ด์ฌ์ฌ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๋ ๊ฒ ์๋ก ๋ค๋ฅธ ์์ญ์ ํด๋น ์์ญ ์ฝ๋์ ์ต์ํ์ ์ํฅ์ ๋ฏธ์น๋ ๊ด์ ์ด๋ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ํตํฉํ๋ค. ์ด๋ฐ ๊ตฌ์กฐ ์ญ์ ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์คํธ ์ฃผ๋ ๊ธฐ๋ฒ์ ์ ์ฉํ ์ ์๋ค.
๐ ์์ฌ ๊ฒฐ์ ์ ์ต์ ํํ๋ผโ
๋ชจ๋์ ๋๋๊ณ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ง์ฝ์ ์ธ ๊ด๋ฆฌ์ ๊ฒฐ์ ์ด ๊ฐ๋ฅํด์ง๋ค.
๊ฐ์ฅ ์ ํฉํ ์ฌ๋์๊ฒ ์ฑ ์์ ๋งก๊ธฐ๋ฉด ๊ฐ์ฅ ์ข๋ค. ์ฐ๋ฆฌ๋ ๋๋๋ก ๊ฐ๋ฅํ ๋ง์ง๋ง ์๊ฐ๊น์ง ๊ฒฐ์ ์ ๋ฏธ๋ฃจ๋ ๋ฐฉ๋ฒ์ด ์ต์ ์ด๋ผ๋ ์ฌ์ค์ ๊น๋จน๊ณ ํ๋ค. ๊ฒ์ผ๋ฅด๊ฑฐ๋ ๋ฌด์ฑ ์ํด์๊ฐ ์๋๋ค. ์ต๋ํ ์ ๋ณด๋ฅผ ๋ชจ์ ์ต์ ์ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด์๋ค. ์ฑ๊ธํ ๊ฒฐ์ ์ ๋ถ์ถฉ๋ถํ ์ง์์ผ๋ก ๋ด๋ฆฐ ๊ฒฐ์ ์ด๋ค. ๋๋ฌด ์ผ์ฐ ๊ฒฐ์ ํ๋ฉด ๊ณ ๊ฐ ํผ๋๋ฐฑ์ ๋ ๋ชจ์ผ๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ ๊ณ ๋ฏผํ๊ณ , ๊ตฌํ ๋ฐฉ์์ ๋ ํํํ ๊ธฐํ๊ฐ ์ฌ๋ผ์ง๋ค.
๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌํ POJO ์์คํ ์ ๊ธฐ๋ฏผํจ์ ์ ๊ณตํ๋ค. ์ด๋ฐ ๊ธฐ๋ฏผํจ ๋ํ์ ์ต์ ์ ๋ณด์ ๊ธฐ๋ฐํด ์ต์ ์ ์์ ์ ์ต์ ์ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ๊ฐ ์ฌ์์ง๋ค. ๋ํ ๊ฒฐ์ ์ ๋ณต์ก์ฑ๋ ์ค์ด๋ ๋ค.
๐ ๋ช ๋ฐฑํ ๊ฐ์น๊ฐ ์์ ๋ ํ์ค์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๋ผโ
ํ์ค์ ์ฌ์ฉํ๋ฉด ์์ด๋์ด์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ์ ์ ํ ๊ฒฝํ์ ๊ฐ์ง ์ฌ๋์ ๊ตฌํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ข์ ์์ด๋์ด๋ฅผ ์บก์ ํํ๊ธฐ ์ฝ๊ณ , ์ปดํฌ๋ํธ๋ฅผ ์ฎ๊ธฐ ์ฝ๋ค. ํ์ง๋ง ๋๋ก๋ ํ์ค์ ๋ง๋๋ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค ์ ๊ณ๊ฐ ๊ธฐ๋ค๋ฆฌ์ง ๋ชปํ๋ค. ์ด๋ค ํ์ค์ ์๋ ํ์ค์ ์ ์ ํ ๋ชฉ์ ์ ์์ด๋ฒ๋ฆฌ๊ธฐ๋ ํ๋ค.
๐ ์์คํ ์ ๋๋ฉ์ธ ํนํ ์ธ์ด๊ฐ ํ์ํ๋ค.โ
๋๋ค์ ๋๋ฉ์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ฑด์ถ ๋ถ์ผ ์ญ์ ํ์์ ์ธ ์ ๋ณด๋ฅผ ๋ช ๋ฃํ๊ณ ์ ํํ๊ฒ ์ ๋ฌํ๋ ์ดํ, ๊ด์ฉ๊ตฌ, ํจํด์ด ํ๋ถํ๋ค. ์ํํธ์จ์ด ๋ถ์ผ์์๋ ์ต๊ทผ ๋ค์ด DSL(Domain-Specific Language)์ด ์๋กญ๊ฒ ์กฐ๋ช ๋ฐ๊ธฐ ์์ํ๋ค. DSL์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ ์ธ์ด๋ ํ์ค ์ธ์ด๋ก ๊ตฌํํ API๋ฅผ ๊ฐ๋ฆฌํจ๋ค. DSL๋ก ์ง ์ฝ๋๋ ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ๊ฐ ์์ฑํ ๊ตฌ์กฐ์ ์ธ ์ฐ๋ฌธ์ฒ๋ผ ์ฝํ๋ค.
์ข์ DSL์ ๋๋ฉ์ธ ๊ฐ๋ ๊ณผ ๊ทธ ๊ฐ๋ ์ ๊ตฌํํ ์ฝ๋ ์ฌ์ด์ ์กด์ฌํ๋ ์์ฌ์ํต ๊ฐ๊ทน์ ์ค์ฌ์ค๋ค. ์ ์์ผ ๊ธฐ๋ฒ์ด ํ๊ณผ ํ๋ก์ ํธ ์ดํด๊ด๊ณ์ ์ฌ์ด์ ์์ฌ์ํต ๊ฐ๊ทน์ ์ค์ฌ์ฃผ๋ฏ์ด ๋ง์ด๋ค. ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ๊ฐ ์ฌ์ฉํ๋ ์ธ์ด๋ก ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด ๋๋ฉ์ธ์ ์๋ชป ๊ตฌํํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ ๋ค.
ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด DSL์ ์ถ์ฑํ ์์ค์ ์ฝ๋ ๊ด์ฉ๊ตฌ๋ ๋์์ธ ํจํด ์ด์์ผ๋ก ๋์ด์ฌ๋ฆฐ๋ค. ๊ทธ๋์ ๊ฐ๋ฐ์๊ฐ ์ ์ ํ ์ถ์ํ ์์ค์์ ์ฝ๋ ์๋๋ฅผ ํํํ ์ ์๋ค.
๐ ๊ฒฐ๋ก โ
์์คํ ์ญ์ ๊นจ๋ํด์ผ ํ๋ค. ๊นจ๋ํ์ง ๋ชปํ ์ํคํ ์ฒ๋ ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ ํ๋ฆฌ๋ฉฐ ๊ธฐ๋ฏผ์ฑ์ ๋จ์ด๋จ๋ฆฐ๋ค. ๋๋ฉ์ธ ๋ ผ๋ฆฌ๊ฐ ํ๋ ค์ง๋ฉด ์ ํ ํ์ง์ด ๋จ์ด์ง๋ค. ๋ฒ๊ทธ๊ฐ ์จ์ด๋ค๊ธฐ ์ฌ์์ง๊ณ , ์คํ ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ด๋ ค์์ง๋ ํ์ด๋ค. ๊ธฐ๋ฏผ์ฑ์ด ๋จ์ด์ง๋ฉด ์์ฐ์ฑ์ด ๋ฎ์์ ธ TDD๊ฐ ์ ๊ณตํ๋ ์ฅ์ ์ด ์ฌ๋ผ์ง๋ค.
๋ชจ๋ ์ถ์ํ ๋จ๊ณ์์ ์๋๋ ๋ช ํํ ํํํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ค๋ฉด POJO๋ฅผ ์์ฑํ๊ณ ๊ด์ ํน์ ๊ด์ ๊ณผ ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด ๊ฐ ๊ตฌํ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์์คํ ์ ์ค๊ณํ๋ ๊ฐ๋ณ ๋ชจ๋์ ์ค๊ณํ๋ , ์ค์ ๋ก ๋์๊ฐ๋ ๊ฐ์ฅ ๋จ์ํ ์๋จ์ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ์.