8.1 ๋ถํด๊ฐ ์ ๋ถ๋ค
๋ช ํ์ฑ์ ์ํด ์ค๋ช ํ ์ฃผ์ ์ฌํญ์ ์ค๋ช ํ๋ ์ข์ ๊ธฐ์ฌ "๊ฐ์ฒด ์งํฅ ์์คํ ์ ๋ถ๋ฆฌ"์ ๊ทธ๋ฆผ์ ๋๋ค.
์์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ์ค๊ณ๊ฐ ์ฝ๋ค๊ณ ์๊ฐํ์๋์?
8.2 ์ธํฐํ์ด์ค, ๊ตฌํ ์จ๊ธฐ๊ธฐ
์์คํ ์ ๊ฒฐํฉ์ ์ค์ด๊ธฐ ์ํ ์ฃผ์ ์์น์ OOP์ ์์น๊ณผ ๊ทธ ๋ค์ ์๋ Encapsulation + Abstraction + Polymorphism์ ์์น์ ๋๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋์ ์๋ก์ ๋ํด "๋ธ๋ ๋ฐ์ค"์ฌ์ผ ํฉ๋๋ค(์บก์ํ) . ์ด๋ ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋๋ก "์ฌ๋ผ๊ฐ"์๋ ์ ๋๋ฉฐ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชฐ๋ผ์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ํ ํ์ ์์คํ ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ํ์ ์์คํ ์ ๊ฐ์ฒด์ ์ง์ ์ก์ธ์คํด์๋ ์ ๋ฉ๋๋ค.
- ๋ชจ๋/ํ์ ์์คํ ์ ์ธํฐํ์ด์ค (์ฆ, ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์์กดํ์ง ์๋ ์ถ์ํ ) ๋ฅผ ํตํด์๋ง ์๋ก ์ํธ ์์ฉํด์ผ ํฉ๋๋ค . ๋ฐ๋ผ์ ๊ฐ ๋ชจ๋์๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ ์ ์๋ ์ธํฐํ์ด์ค๊ฐ ์์ด์ผ ํฉ๋๋ค.
"๋ธ๋ ๋ฐ์ค"(์บก์ํ)์ ์์น์ ํตํด ๋ค๋ฅธ ํ์ ์์คํ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ ํ์ ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค. "๋ธ๋ ๋ฐ์ค"์ธ ๋ชจ๋์ ๋น๊ต์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ์๋ก ๋ค๋ฅธ ๋ชจ๋(๋๋ ๋ชจ๋๊ณผ ํ๊ฒฝ)์ ๊ต์ฐจ์ ์์๋ง ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ธํฐ๋์ ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ(์ถ์์ ์ธ) ํํ, ์ฆ ์ธํฐํ์ด์ค์ ํํ๋ก ๊ธฐ์ ๋์ด์ผ ํ๋ค. ์ด ๊ฒฝ์ฐ ์ฝ๋๋ ์ธํฐํ์ด์ค ๊ณ์ฝ์ ์ค์ํ๋ ๋ชจ๋ ๊ตฌํ์์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ๋คํ์ฑ์ด๋ผ๊ณ ํ๋ ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ํ ๊ตฌํ(๋ชจ๋ ๋๋ ๊ฐ์ฒด)์ผ๋ก ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ทธ๊ฒ์ด ์๋ธ๋ฆฟ์ด ์ธํฐํ์ด์ค์ธ ์ด์ ์ ๋๋ค. ์น ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ ๋๋ค. ์น ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ผ๋ถ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์๋ธ๋ฆฟ์ ๋ํ ์ปจํ ์ด๋์ ๊ตฌ์กฐ์ ๋ํด ์กฐ๊ธ ์๊ณ ์์ต๋๋ค. Servlet ์ธํฐํ์ด์ค๋ Java ์น ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ ์ธ๊ณ๋ฅผ ์ฅ์ ํ๋ ๋ฐ ํ์ํ ์ต์ํ์ ์ํธ ์์ฉ์ธ ๊ณ์ฝ, ํ์ค์ ๋๋ค.
๋คํ์ฑ์ ๋๋๋ก ์๋ชป ์๊ฐ๋๋ ๊ฒ์ฒ๋ผ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ฌด์๋ณด๋ค๋ ๋์ผํ ์ธํฐํ์ด์ค ๋๋ "ํ๋์ ์ธํฐํ์ด์ค, ๋ง์ ๊ตฌํ"์ ๊ฐ์ง ๋ชจ๋/๊ฐ์ฒด์ ์ํธ ๊ตํ ๊ฐ๋ฅ์ฑ์ ๋๋ค. ๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ์์ ๋ฉ์ปค๋์ฆ์ด ์ ํ ํ์ํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์์ ๊ฐ๋ฅํ ๋๋ง๋ค ํผํด์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค .
์ธํฐํ์ด์ค์ ๋คํ์ฑ ๋๋ถ์ ์ด๋ฏธ ์์ฑ๋ ๊ฒ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์ฝ๋๋ฅผ ์์ ํ๊ณ ํ์ฅํ ์ ์๋ ๋ฅ๋ ฅ(๊ฐ๋ฐฉํ ์์น)์ด ๋ฌ์ฑ๋ฉ๋๋ค.
๋ชจ๋์ ์ํธ ์์ฉ์ด ์ธํฐํ์ด์ค์ ํํ๋ก ๋ ์ ์ ์ผ๋ก ์ค๋ช ๋๊ณ ํน์ ๊ตฌํ์ ์ฐ๊ฒฐ๋์ง ์๋ ํ ์์คํ ์ ๋ํด ์ ๋์ ์ผ๋ก "๊ณ ํต ์์ด" ํ ๋ชจ๋์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ค๋ฅธ ๋ชจ๋๋ก ๊ต์ฒดํ ์ ์๋ ๊ธฐํ๊ฐ ์์ต๋๋ค. ์ ๊ฒ์ ์ถ๊ฐํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ์ญ์์ค.
LEGO ์์ฑ์์ ๊ฐ์ต๋๋ค. ์ธํฐํ์ด์ค๋ ์ํธ ์์ฉ์ ํ์คํํ๊ณ ์ ์ ํ ์ปค๋ฅํฐ๊ฐ ์๋ ๋ชจ๋ ๋ชจ๋์ ์ฐ๊ฒฐํ ์ ์๋ ์ผ์ข ์ ์ปค๋ฅํฐ ์ญํ ์ ํฉ๋๋ค.
๋์์ด๋์ ์ ์ฐ์ฑ์ ํ๋์ ๋ชจ๋ ๋๋ ๋ถํ์ ๋์ผํ ์ปค๋ฅํฐ(๋์ผํ ์ธํฐํ์ด์ค ํฌํจ)๊ฐ ์๋ ๋ค๋ฅธ ๋ถํ์ผ๋ก ๊ฐ๋จํ ๊ต์ฒดํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ํ๋ ๋งํผ ์ ๋ถํ์ ์ถ๊ฐํ ์ ์๋ค๋ ์ฌ์ค์ ์ํด ๋ณด์ฅ๋ฉ๋๋ค(๋์์ ๊ธฐ์กด ๋ถํ์ ์ด๋ค ์์ผ๋ก๋ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค).
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ํ์ ์์คํ ์ ์ ์ฒด์ ์ผ๋ก ๊ณ ๋ คํ๊ณ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ฌด์ํ์ฌ ๋ ๊ฐ๋จํ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ชจ๋์ด ์ํธ ์์ฉํ ์ ์๋๋ก ํ์ฉํ๋ฉด์ ๋์์ ์๋ก์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ์๋ฌด๊ฒ๋ ์์ง ๋ชปํ๋ฏ๋ก ๋์จํ ๊ฒฐํฉ์ ๊ธฐ์ด๊ฐ ๋๋ ์ต์ํ์ ์ง์ ์์น์ ์์ ํ ๊ตฌํํฉ๋๋ค.
์ธํฐํ์ด์ค๊ฐ ๋ ์ผ๋ฐ์ /์ถ์์ ์ผ๋ก ์ ์๋๊ณ ์ธํฐํ์ด์ค๊ฐ ์ํธ ์์ฉ์ ๋ถ๊ณผํ๋ ์ ํ์ด ์ ์์๋ก ์์คํ ์ด ๋ ์ ์ฐํด์ง๋๋ค. ์ฌ๊ธฐ์์ SOLID์ ์์น ์ค ํ๋๊ฐ ์ค์ ๋ก ๋ค๋ฐ๋ฆ ๋๋ค. "๋๊บผ์ด ์ธํฐํ์ด์ค"์ ๋ฐ๋ํ๋ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น ์ ๋๋ค.
๊ทธ๋ ํฌ๊ณ ๋ถํผ๊ฐ ํฐ ์ธํฐํ์ด์ค๋ฅผ ๋ ์๊ณ ๋ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๋ก ๋๋์ด์ ์์ ์ธํฐํ์ด์ค(๋ชจ๋์ ๋ฐ๋ผ ๋ค๋ฆ)์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ํด์ผ ํ๋ ๋ฉ์๋์ ๋ํด์๋ง ์ ์ ์๋๋ก ํด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค.
์ด ์์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ณต์ํ๋ฉ๋๋ค. "ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ(๋ฐฉ๋ฒ์ ์ฃผ์)์ ์์กดํด์๋ ์ ๋ฉ๋๋ค." ๋๋ "๋ง์ ํน์ ์ธํฐํ์ด์ค๊ฐ ํ๋์ ๋ฒ์ฉ ์ธํฐํ์ด์ค๋ณด๋ค ๋ซ์ต๋๋ค."
๋ชจ๋์ ๋ด๋ถ ๊ตฌ์กฐ์ ๊ตฌ์กฐ์ ๋ํ ์ง์์ ์ฌ์ฉํ์ง ์๊ณ ์ธํฐํ์ด์ค, ์ฆ ์ถ์ํ์ ๋์์ผ๋ก๋ง ๋ชจ๋์ ์ํธ ์์ฉ๊ณผ ์ข ์์ฑ์ ์ค๋ช ํ ๋๋ง ์ฝํ ์ฐ๊ฒฐ์ฑ์ด ์ ๊ณต๋๋ฉฐ ์ค์ ๋ก๋ ์บก์ํ๊ฐ ๊ตฌํ๋ฉ๋๋ค. ๋ํ ๋คํ์ฑ์ผ๋ก ์ธํด ๋ค๋ฅธ ๊ตฌํ์ ์ถ๊ฐํ๊ณ ์ฌ์ฉํ์ฌ ์์คํ ๋์์ ํ์ฅ/๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์, ์ฐ๋ฆฌ๋ ๋ค์ OOP - ์บก์ํ, ์ถ์ํ, ๋คํ์ฑ์ ์์ต๋๋ค.
8.3 ์ธ๊ด: ๋ชจ๋ ์ธํฐํ์ด์ค
์ฌ๊ธฐ์ ์๋ จ ๋ ํ๋ก๊ทธ๋๋จธ๋ ๋ค์๊ณผ ๊ฐ์ด ์ง๋ฌธํฉ๋๋ค. ๋์์ธ์ด ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด ์์ค์ด ์๋๋ผ ๋ชจ๋ ์์ค์ด๋ฉด ๋ชจ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ฌด์์ ๋๊น?
๋ต๋ณ: ๋์์ธ ํจํด์ ์ธ์ด๋ก ๋งํ๋ฉด ๋ชจ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ด๋นํ ์ ์๋ ํน์ ๊ฐ์ฒด์ธ Facade ๊ฐ ์์ต๋๋ค . ๊ฒ์ดํธ์จ์ด ์ ๋ฏธ์ฌ(์: MobileApiGateway)๊ฐ ํฌํจ๋ ๊ฐ์ฒด์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ ์ด๋ ํ์ฌ๋์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
ํ์ฌ๋๋ ํน์ ํ์ ์์คํ ๊ณผ ์์ ํ๊ธฐ ์ํ ๋์ ์์ค์ ์์ ์งํฉ์ ์ถ์ ํ๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ก, ๋ด๋ถ ๊ตฌ์กฐ์ ๊ทธ ๋ค์ ์๋ ์ง์ ํ ๋ณต์ก์ฑ์ ์จ๊น๋๋ค . ํ์ ์์คํ ๊ตฌํ์ ๋ณ๊ฒฝ์ ๋ํ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋จ์ผ ์ง์ ์ ์ญํ ์ ํฉ๋๋ค.
๋ชจ๋์ ์ค๊ณํ ๋ ์ธํฐํ์ด์ค์ ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๋ถ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ์ฅ ์ค์ํ ์ค๊ณ ํจํด ์ค ํ๋์ธ "Facade"๋ฅผ ๋ฐฉ๊ธ ์๊ฐํ์ต๋๋ค.
๋ํ "Facade"๋ ์ผ๋ฐ ๊ฐ์ฒด์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ๋ชจ๋์ ์ค๊ณํ ๋ ํด๋์ค ์ค๊ณ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ ์ฉํ ์์น๊ณผ ๊ธฐ์ ์ ์ ์ฉํฉ๋๋ค.
์ฐธ๊ณ : ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ๋ ํด๋์ค(๊ฐ์ฒด)๋ฅผ ์ค๊ณํ ๋ ์ธํฐํ์ด์ค์ ์ค์์ฑ์ ์ดํดํ์ง๋ง ๋ชจ๋ ์์ค์์๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์์ด๋์ด๋ฅผ ๋ฐ๊ฒฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.