11์ฅ ์์คํ
๋์๋ฅผ ์ธ์ด๋ค๋ฉด?
์จ๊ฐ ์ธ์ธํ ์ฌํญ์ ํผ์์ ์ง์ ๊ด๋ฆฌํ ์ ์์๊น? ๋ถ๊ฐ๋ฅํ๋ค.
๋์์๋ ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ฌ๋๋ค๋ ์์ผ๋ฉฐ ์๋, ์ ๋ ฅ, ๊ตํต ๋ฑ ์์ ์ฌํญ์ ์ง์คํ๋ ์ฌ๋๋ค๋ ์๋ค.
๋์๊ฐ ๋์๊ฐ๋ ๋ ๋ค๋ฅธ ์ด์ ๋ ์ ์ ํ ์ถ์ํ์ ๋ชจ๋ํ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ํฐ ๊ทธ๋ฆผ์ ์ดํดํ์ง ๋ชปํ ์ง๋ผ๋ ๊ฐ์ธ๊ณผ ๊ฐ์ธ์ด ๊ด๋ฆฌํ๋ ๊ตฌ์ฑ์์๋ ํจ์จ์ ์ผ๋ก ๋์๊ฐ๋ค.
ํํ ์ํํธ์จ์ด ํ๋ ๋์์ฒ๋ผ ๊ตฌ์ฑํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ์ ์ํ๋ ์์คํ ์ ๋น์ทํ ์์ค์ผ๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋ ์ถ์ํ๋ฅผ ์ด๋ค๋ด์ง ๋ชปํ๋ค.
๊นจ๋ํ ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด ๋ฎ์ ์ถ์ํ ์์ค์์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ฌ์์ง๋ค.
์ด ์ฅ์์๋ ๋์ ์ถ์ํ ์์ค์ธ ์์คํ ์์๋ ๊นจ๋ํจ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค.
1. ์์คํ ์ ์๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ผ
์ํํธ์จ์ด ์์คํ ์ ์ค๋น ๊ณผ์ ๊ณผ ๋ฐํ์ ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ์ค๋น ๊ณผ์ : ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์์กด์ฑ์ ์๋ก ์ฐ๊ฒฐํ๋ ๊ณผ์
- ๋ฐํ์ ๋ก์ง: ์ค๋น ๊ณผ์ ์ดํ์ ์ด์ด์ง๋ ๊ณผ์
์์ ๋จ๊ณ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ด์ผ ํ ๊ด์ฌ์ฌ๋ค.
๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์ฐ๋ฆฌ ๋ถ์ผ์์ ๊ฐ์ฅ ์ค๋๋๊ณ ๊ฐ์ฅ ์ค์ํ ์ค๊ณ ๊ธฐ๋ฒ ์ค ํ๋๋ค.
๋ถํํ๋ ๋๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๋จ๊ณ๋ผ๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ง ์๋๋ค.
์ค๋น ๊ณผ์ ์ฝ๋๋ฅผ ์ฃผ๋จน๊ตฌ๊ตฌ์์ผ๋ก ๊ตฌํํ ๋ฟ๋ง ์๋๋ผ ๋ฐํ์ ๋ก์ง๊ณผ ๋ง๊ตฌ ๋ค์๋๋ค.
public Service getService() {
if (service == null)
service = new MyServiceImpl(...); // ๋ชจ๋ ์ํฉ์ ์ ํฉํ ๊ธฐ๋ณธ๊ฐ์ผ๊น?
return service;
}
์ด๊ฒ์ด ์ด๊ธฐํ ์ง์ฐ ํน์ ๊ณ์ฐ ์ง์ฐ์ด๋ผ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์ค์ ๋ก ํ์ํ ๋๊น์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๋ ์๊ฐ์ด ๋นจ๋ผ์ง๋ค.
- ์ด๋ค ๊ฒฝ์ฐ์๋ null ํฌ์ธํฐ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
๋ง์ ์ฅ์ ์ด ์์ง๋ง ๋จ์ ๋ํ ์กด์ฌํ๋ค.
- ๋ฉ์๋๊ฐ ์์ฑ์ ํด๋์ค์ ์ธ์์ ๋ช ์์ ์ผ๋ก ์์กดํ๋ค.
- ๋ฐํ์ ๋ก์ง์์ ์์ฑ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์์กด์ฑ์ ํด๊ฒฐํ์ง ์์ผ๋ฉด ์ปดํ์ผ์ด ์ ๋๋ค.
- ํ ์คํธ๊ฐ ์ด๋ ต๊ณ ๋จ์ผ ์ฑ ์ ์์น์ ์๋ฐฐํ๋ค.
- ์์ฑ์ ํด๋์ค๊ฐ ๋ชจ๋ ์ํฉ์ ์ ํฉํ ๊ฐ์ฒด์ธ์ง ๋ชจ๋ฅธ๋ค.
์ด๊ธฐํ ์ง์ฐ ๊ธฐ๋ฒ์ ์์๋ก ์ฌ์ฉํ๋ฉด ๋ชจ๋์ฑ์ด ์ ์กฐํด์ง๋ค.
์ฒด๊ณ์ ์ด๊ณ ํํํ ์์คํ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์์กด์ฑ์ ์ฐ๊ฒฐํ ๋ ๋ชจ๋์ฑ์ ๊นจ์๋ ์ ๋๋ค.
์ค์ ๋ ผ๋ฆฌ๋ ์ผ๋ฐ ์คํ ๋ ผ๋ฆฌ์ ๋ถ๋ฆฌํด์ผ ๋ชจ๋์ฑ์ด ๋์์ง๋ค.
1) Main ๋ถ๋ฆฌ
์์ฑ๊ณผ ๊ด๋ จํ ์ฝ๋๋ ๋ชจ๋ main์ด๋ main์ด ํธ์ถํ๋ ๋ชจ๋๋ก ์ฎ๊ธฐ๊ณ
๋๋จธ์ง ์์คํ ์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๊ณ ๋ชจ๋ ์์กด์ฑ์ด ์ฐ๊ฒฐ๋์๋ค๊ณ ๊ฐ์ ํ๋ค.
- main ํจ์์์ ์์คํ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๊ธด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์ ํ ๋ชจ๋ฅด๊ณ ๊ทธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ฟ์ด๋ค.
2) ํฉํ ๋ฆฌ
๋๋ก๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ์ ํ ํ์๋ ์๊ธด๋ค.
์ด๋๋ ์ถ์ ํฉํ ๋ฆฌ(Abstract Factory) ํจํด์ ์ฌ์ฉํ๋ค.
- ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ์ฒ๋ฆฌ ์์คํ ์์ LineItem ์ธ์คํด์ค๋ฅผ ์์ฑํด Order์ ์ถ๊ฐํ ๋
- LineItem์ ์์ฑํ๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ์ ํ์ง๋ง ์์ฑํ๋ ์ฝ๋๋ ๋ชจ๋ฅธ๋ค.
3) ์์กด์ฑ ์ฃผ์
์ ์ด ์ญ์ ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ ์ด ์ญ์ ์ ํ ๊ฐ์ฒด๊ฐ ๋งก์ ๋ณด์กฐ ์ฑ ์์ ์๋ก์ด ๊ฐ์ฒด์๊ฒ ์ ์ ์ผ๋ก ๋ ๋๊ธด๋ค.
- ๊ฐ์ฒด๋ ์์กด์ฑ ์์ฒด๋ฅผ ์ธ์คํด์ค๋ก ๋ง๋๋ ์ฑ ์์ ์ง์ง ์๊ณ ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋งก๋๋ค. (๋จ์ผ ์ฑ ์ ์์น)
- ๋์ ์ ์ด๋ฐ ์ฑ ์์ ๋ค๋ฅธ ์ ๋ด ๋ฉ์ปค๋์ฆ์ ๋๊ฒจ์ผ ํ๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ ์ด๋ฅผ ์ญ์ ํ๋ค.
- ์ด๊ธฐ ์ค์ ์ ์์คํ ์ ์ฒด์์ ํ์ํ๋ฏ๋ก ๋๊ฐ ์ฑ ์์ง ๋ฉ์ปค๋์ฆ์ผ๋ก main ๋ฃจํด์ด๋ ํน์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ค.
2. ํ์ฅ
์ฒ์๋ถํฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์คํ ์ ๋ง๋ค ์ ์๋ค๋ ๋ฏฟ์์ ๋ฏธ์ ์ด๋ค.
์ค๋ ์ฃผ์ด์ง ์ฌ์ฉ์ ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ๊ตฌํํ๊ณ ๋ด์ผ์ ์๋ก์ด ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๋ฉด ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ณต์ ์ด๊ณ ์ ์ง์ ์ธ ์ ์์ผ ๋ฐฉ์์ ํต์ฌ์ด๋ค.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ, ๋ฆฌํฉํฐ๋ง, ๊นจ๋ํ ์ฝ๋๋ ์ฝ๋ ์์ค์์ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
ํ์ง๋ง ์์คํ ์์ค์์ ์ํํธ์จ์ด ์์คํ ๊ณผ ๋ฌผ๋ฆฌ์ ์ธ ์์คํ ์ ๋ค๋ฅด๋ค.
๊ด์ฌ์ฌ๋ฅผ ์ ์ ํ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ๋ค๋ฉด ์ํํธ์จ์ด ์ํคํ ์ฒ๋ ์ ์ง์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋ค.
3. ํ ์คํธ ์ฃผ๋ ์์คํ ์ํคํ ์ฒ ๊ตฌ์ถ
์ฝ๋ ์์ค์์ ์ํคํ ์ฒ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ฉด ์ง์ ํ ํ ์คํธ ์ฃผ๋ ์ํคํ ์ฒ ๊ตฌ์ถ์ด ๊ฐ๋ฅํด์ง๋ค.
๊ทธ๋๊ทธ๋ ์๋ก์ด ๊ธฐ์ ์ ์ฑํํด ๋จ์ํ ์ํคํ ์ฒ๋ฅผ ๋ณต์กํ ์ํคํ ์ฒ๋ก ํค์๊ฐ ์๋ ์๋ค.
์ธ๊ณ ์ต๋ ์น ์ฌ์ดํธ๋ค์ ๊ณ ๋์ ์๋ฃ ์บ์ฑ, ๋ณด์, ๊ฐ์ํ ๋ฑ์ ์ด์ฉํด ์์ฃผ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ค.
์ค๊ณ๊ฐ ์ต๋ํ ๋ถ๋ฆฌ๋์ด ๊ฐ ์ถ์ํ ์์ค๊ณผ ๋ฒ์์์ ์ฝ๋๊ฐ ์ ๋นํ ๋จ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.