#1 ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
by JiwonDev์บก์ํ, ์ถ์ํ, ์์, ๋คํ์ฑ... ๋ง์ด ๋ค์ด๋ดค์ง๋ง, ์ ์ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์์ง ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํด๋น ๊ธ์์๋ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ฐ๋ ์ด ์ ์๊ฒผ๊ณ , ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์งํฅํ๋ ๊ฐ์ฒด์งํฅ์ ๋ฌด์์ธ์ง ์์๋ณด์.
# ๋คํ์ฑ์ ๋ณธ์ง
๋คํ์ฑ์ ๋ณธ์ง์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ์คํ ์์ ์์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ๋คํ์ฑ์ ๊ตฌํํ๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
1. ์ค์ ์๋น์ค์์ ํผ์ ์๋ ๊ฐ์ฒด๋ ์๋ค.
- ํด๋ผ์ด์ธํธ : ์์ฒญ , ์๋ฒ: ์๋ต
- ์ ๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ๊ฐ์ ๊ฐ์ฒด ์๋ฒ๋ค์ ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.
2. ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํด์ ์ค๊ณํ๋ฉด ๋ง์ ์ฅ์ ์ด ์๋ค. => ๋คํ์ฑ
- ํด๋ผ์ด์ธํธ๋ ๋์์ ์ญํ (=์ธํฐํ์ด์ค)๋ง ์๋ฉด ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์(=ํด๋์ค, ๊ฐ์ฒด)์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ ๋ฐ์ง ์๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํด๋ ์ํฅ ๋ฐ์ง ์๋๋ค.
- ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ์ฌ ํ์ฅ์ด ์ฝ๋ค.
ํ์ง๋ง ๋คํ์ฑ์ ๊ตฌํํ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ๋๊ฑด ๋งค์ฐ ์ด๋ ต๋ค. ์ผ๋จ ๋์ถฉ ๋ง๋ค์ด๋๊ณ ๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์์ ํ๋ฉด ๊ฒฐ๊ตญ์๋ ํด๋ผ์ด์ธํธ, ์๋ฒ์ ๋ชจ๋ ํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ธฐ์ ๋คํ์ฑ์ ๊ตฌํํ ์๋ฏธ๊ฐ ์์ด์ง๋ค.
์คํ๋ง ํ๋ ์์ํฌ์ ํต์ฌ ๊ธฐ๋ฅ์ ์๋ฐ ์ฝ๋์ ๋คํ์ฑ์ ๊ทน๋ํํ์ฌ ๊ตฌํํ ์ ์๊ฒ ๋์์ฃผ๋ ๊ฒ์ด๋ค. ์คํ๋ง์์ ์ด์ผ๊ธฐํ๋ ์ ์ด์ ์ญ์ (IoC) ๋ ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ค ๋คํ์ฑ์ ์ฝ๊ฒ ๊ตฌํํ๊ฒ ๋ง๋ค์ด์ค๋ค.
# ์ข์ ๊ฐ์ฒด์งํฅ์ ์ค๊ณ 5์์น (SOLID)
์คํ๋ง์์๋ IoC๋ DI์ ๊ฐ์ ๊ฐ๋ ๋ฟ๋ง์๋๋ผ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ ์์น์ ์ด์ฉํ์ฌ ์ค๊ณ๋์ด์๋ค. ์คํ๋ง ํ๋ ์์ํฌ ์ฝ๋๋ฅผ ๋ณผ ์ผ์ด ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ดํด๋ณธ๋ค๋ฉด ์๋์ ์์น๋ค์ ์ ๋ง ์ฒ ์ ํ๊ฒ ์งํค๋ ค๊ณ ๋ ธ๋ ฅํ ํ์ ๋ค์ด ๋จ์์๋ค.
์ฐธ๊ณ ๋ก ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ์ ๋ช ํ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ 5์์น SOLID๋ CleanCode ์ฑ ์ผ๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ๊ฐ์ฒด์งํฅ์ 5์์น(Principle)์ ์๊ธ์๋ฅผ ์ด์ด ๋ถ์ธ ๊ฒ์ด๋ค.
@ SRP (Single Responsibility ๋จ์ผ์ฑ ์์์น)
ํ ๊ฐ์ฒด๋ ํ๋์ ์ฑ ์์ ์ง๋๋ค. ์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋, ์ค์ง ํ๋ ๋ฟ์ด์ด์ผํ๋ค.
ํ์ง๋ง ์ค์ ํ์ ์์ ๊ฐ๋ฐํ๋ค๋ณด๋ฉด, 'ํ๋์ ์ฑ ์' ์ด๋ผ๋ ๊ฐ๋ ์ด ์๋นํ ๋ชจํธํ๋ค. ์ด๋๊น์ง๋ฅผ ํ๋์ ์ฑ ์์ผ๋ก ๋ด์ผํ ๊น? ์ค์ํ ๊ธฐ์ค์ ๋ฐ๋ก ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ์์ ๋ ์ด๋ค ํ๊ธํจ๊ณผ๊ฐ ์๋์ง ์๊ฐํ๋ฉฐ ๊ฐ๋ฐํ๋ฉด SRP๋ฅผ ์ฝ๊ฒ ๋ฐ๋ฅผ ์ ์๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํด๋์ค๋น ์ฑ ์์ ํ๋๋ก ์ ํด์, ๋์ค์ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ค๋ฅธ ๊ณณ์ ํ๊ธํจ๊ณผ๊ฐ ์ต๋ํ ์ ๋๋ก ๋ง๋ค์ด๋ผ๋ ๋ง์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ๋ง๋ค ๋, ์ด๋ค ๋น์ฆ๋์ค ์๋น์ค๋ฅผ ๊ตฌํํ๋ ํญ์ ์๋ค๋ก ๋ฐ๋ณต๋๋ ์ค์ ์ด ์๋ค. ์ด๋ฅผ Cross-Cutting Concerns(๊ณตํต ๊ด์ฌ์ฌํญ)์ด๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ๊ด์ฌ์ฌํญ(Concerns)์ ๋ฐ๋ผ ์๋ฏธ์๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ค์ ์ ๋ถ๋ฆฌํ๊ณ ๊ณตํต๋ ์ค์ ์ ๋ชจ๋ํ ํ๋ ๊ฒ์ AOP(Asepct Oriented Programming), ๊ด์ฌ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๊ฒ๋ ๊ฒฐ๊ตญ SRP ์์น์ด ์ถ๊ตฌํ๋ ๊ฒ๊ณผ ๋งฅ๋ฝ์ด ๊ฐ๋ค.
@ OCP (Open/closed ๊ฐ๋ฐฉ-ํ์ ์์น)
์ํํธ์จ์ด ์ํฐํฐ(ํด๋์ค,๋ชจ๋,ํจ์)๋ ํ์ฅ์๋ ์ด๋ ค์์ง๋ง, ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค.
์ฌ์ค ์ด๊ฑด ๋๊ฐ๋ด๋ ๋น์ฐํ ์ด์ผ๊ธฐ๋ค. ํ์ง๋ง ์ง์ ๊ตฌํํด๋ณด๋ฉด ๋ณ๊ฒฝ์ ํด์ผ ํ์ฅ์ ํ๋๊ฑด๋ฐ, ์ด๊ฒ ๋ฌด์จ ํ์๋ฆฌ์ผ๊น?
OCP๋ ๋คํ์ฑ์ ํ์ฉ, ์ฆ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ฒด๋ '์ญํ '์ ์์กด์ฑ์ ๊ฐ์ ธ์ผํ์ง, '๊ตฌํ์ฒด'์ ์์กด์ฑ์ ๊ฐ์ง๋ฉด ์๋๋ค.
ํ์ง๋ง ์๋์ ๊ฐ์ ์ํฉ์ ์๊ฐํด๋ณด์. ์๋น์ค์์ DB ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌDB์์ JDBC๋ก ๋ฐ๊พธ๋ ์ฝ๋์ด๋ค.
๊ตฌํ์ฒด๋ฅผ ๋ฐ๋ก ์์ฐ๊ณ ์์ ์์ ์ฒ๋ผ ์ธํฐํ์ด์ค(์ญํ )์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ OCP๋ฅผ ์ ์ง์ผฐ๋ค๊ณ ์๊ฐํ ์๋ ์๊ฒ ๋ค. ๊ทธ๋ฌ๋ ์์ ๊ฐ์ด ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์๋ค๊ณ ํ๋๋ผ๋ ์๋ฒ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ๋ ์์ ๊ฐ์ด ํด๋ผ์ด์ธํธ(์๋น์ค) ํด๋์ค์์ ์์กด๊ด๊ณ, ์ฆ ๊ตฌํ์ฒด ์ฝ๋๋ฅผ ์ง์ ๋ฐ๊ฟ์ผ ํ๋ค.
์์ ์์ ๋ ๋จ์ํด์ ์ฌ์๋ณด์ด์ง๋ง, ์ค์ ์๋น์ค์์๋ ํด๋์ค๊ฐ ๋ณต์กํ๊ฒ ์ฝํ์์ด ์ด๋ ์ ๋ ์ฌ์ด ์์ ์ด ์๋๋ค. ๊ฒฐ๊ตญ ์ด๋ ๊ฒ ๋ณ๊ฒฝํ ๋ ๋ง๋ค ์๊ด์๋ ๋ค๋ฅธ ํด๋์ค์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ์์ ํ ๋ค ๋ฌธ์ ๊ฐ ์๋์ง ๋ค์ ํ ์คํธ, ๊ฒ์ฆํด์ผํ๋ฉด ํ๋ค๊ฒ OCP๋ฅผ ๊ตฌํํ ์๋ฏธ๊ฐ ์์ด์ง๋ค. ์ฆ ์ด๋ OCP๋ฅผ ๋ฐ๋ฅด์ง ์๋๋ค๊ณ ๋ด์ผํ๋ค.
๊ทธ๋์ ์คํ๋ง์์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ '์ค์ ์'๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ์ญํ (์ธํฐํ์ด์ค)์ ๋ฃ์ ๊ตฌํ์ฒด, ์ฆ ์์กด๊ด๊ณ๋ฅผ ๋์ ์ฃผ์ ํด์ค๋ค. ์ฆ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ์์ด ์๋ฒ๋ฅผ ํ์ฅ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋๋ฐ, ์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ์ง๋ ์ด๋ ์๋์ @DIP ์์ ์ถ๊ฐ๋ก ์ค๋ช ํ๊ฒ ๋ค.
@ LSP (Liskov substitution ๋ฆฌ์ค์ฝํ ์นํ ์์น)
์๋ธํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐํ์ (base type)์ผ๋ก ๊ต์ฒดํด๋ ์ ์ ๋์ํด์ผํ๋ค.
(๋ฆฌ์ค์ฝํ ์นํ : Sub๊ฐ Super์ ์์์ด๋ผ๋ฉด, ์๋ฌด๋ฐ ์์ ์์ด Super๊ฐ์ฒด๋ฅผ Sub๊ฐ์ฒด๋ก ์นํํด๋ ๋์ํด์ผ ํ๋ค. )
๋ง์ด ์ด๋ ค์ด๋ฐ, ์ด๋ ์๊ณ ๋ณด๋ฉด ๋น์ฐํ ์ด์ผ๊ธฐ์ด๋ค. ๋ค๋ง ๋จ์ํ Parent a = Child b ๋ง ๊ฐ๋ฅํ๊ฒ ์๋๋ผ, ์ด๋ ๊ฒ ์ ์บ์คํ ํ๋๋ผ๋ ๋์์ ๋ฌธ์ ๊ฐ ์์ด์ผํ๋ค๋ ๋ง์ด๋ค.
์๋์ฐจ๋ฅผ ์๊ฐํด๋ณด์. [์๋์ฐจ ์ธํฐํ์ด์ค]์์ ์ ๊ณตํ๋ 'Break' ๋ผ๋ ๊ธฐ๋ฅ์ ํ์ ํด๋์ค์์ ์๋์ฐจ๋ฅผ ๋ฉ์ถ๋๋ก ๊ตฌํํด์ผํ๋ค. ํ์ง๋ง ๊ฐ๋ฐํ๋ค๋ณด๋ฉด [์๋์ฐจ ๊ฐ์ฒด]์ 'Break' ๋ผ๋ ๋ฉ์๋์ ์ฐฝ๋ฌธ์ ์ฐ๋ค๋๊ฐ, ์๋๋ฅผ ๊ฐ์ํ๋ ์ด์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํ ํ ์๋ ์๋ค. ๋ฌผ๋ก ํด๋น ๋น์ ๋ ์ ์ ๋๊ฐ ์ง์ด์ง๋ง ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ธํฐํ์ด์ค์ ๊ท์ฝ์ ๋ฒ์ด๋์ ์ฝ๋ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ณ , ๊ทธ๋ ๊ฒ ํ๋ค๊ณ ํด์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋๊ฑฐ๋ ์๋ฒ๊ฐ ์ฃฝ๋๊ฑด ์๋๋๊น ๊ด์ฐฎ๋ค๊ณ ๋๊ฒจ๋ฒ๋ฆด ์๋ ์๋ค.
LSP๋ ๋จ์ํ '์ปดํ์ผ๋์ด ๋์ํ๋ ์ฝ๋'๋ฅผ ๋์ด์์ ์ธํฐํ์ด์ค์ ์ค๊ณ๋ฅผ ์ดํดํ๊ณ ์ธํฐํ์ด์ค์ ๊ท์ฝ์ ๊นจ๋ ์ด์ํ ๊ตฌํ์ ํ์ง๋ง๋ผ๋ ๋ง์ด๋ค. ์ฆ ์ด๋ ต๊ฒ ๋งํ๋ฉด '์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์, ํ์ ํ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ผ' ๋ผ๋ ๋ป.
@ ISP (Interface segregation ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์ ๋๋ค.
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ, ํ๋์ ๋ฒ์ฉ ์ธํฐํ์ด์ค๋ณด๋ค ๋ซ๋ค. ๋ฒ์ฉ์ ์ด๊ฒ ์ธ๋ ค๊ณ ์ฌ์ฉํ์ง๋ ์๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋๊ฑด ์์กด ๊ด๊ณ์ ๊ฒฐํฉ๋๋ฅผ ๋๋ฆฌ๋ ํ์์ด๋ค. ํ์ํ๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ ์ธํฐํ์ด์ค๋ก ๋๋ ์ ๊ตฌํํ๋๋ก ํ์.
- ์๋์ฐจ ์ธํฐํ์ด์ค -> ์ด์ ์ธํฐํ์ด์ค, ์์ง ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
- ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ -> ์ด์ ์ ํด๋ผ์ด์ธํธ, ํ์น์ ํด๋ผ์ด์ธํธ, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ ๋ก ๋ถ๋ฆฌ
์ด๋ ๊ฒ ๋ฒ์ฉ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ถ๋ฆฌํด์, ์ธํฐํ์ด์ค ์ค๊ณ๋ฅผ ๋ช ํํ๊ฒ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ค์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ ์ผ๋ถ๋ฅผ ๋ณ๊ฒฝํด๋ ์๋ก ์ํฅ๋ผ์น์ง ์๊ฒ ๋ง๋ค์ด์ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ํ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ผ๋ ์์น์ด๋ค.
@ DIP (Dependency inversion ์์กด๊ด๊ณ ์ญ์ ์ ์์น)
)ํด๋น ๋งํฌ์ ๊ธ์ด ์ดํด๊ฐ ๋ ๋, ๋ด์ฉ์ ์ถ๊ฐํ ์์ )
* ์ฐธ๊ณ ๋ก ์์กด๊ด๊ณ ์ฃผ์ (DI, Dependency Injection)์ DIP๋ฅผ ์งํค๋ ๋ฐฉ๋ฒ์ค ํ๋์ด์ง, DIP ์์ฒด๊ฐ ์๋๋ค. [์ปจํ ์ด๋๋ฅผ ์ด์ฉํ ์์กด๊ด๊ณ ์ฃผ์ ]์ DIP์ ๋คํ์ฑ์ ์ ๊ณต์ ํฌํจํ ์ฌ๋ฌ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ถ์ํ์ ์์กดํด์ผํ๋ค. ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค. ๊ตฌํ์ด ์๋ ์ธํฐํ์ด์ค์ ํ๋ก๊ทธ๋๋ฐํ๋ผ.
๊ฐ์ฒด์งํฅ์ 5์์น์ ์ฑ ์ผ๋ก ๋ง๋ ๋ก๋ฒํธ C.๋งํด์ ์๋์ ๊ฐ์ด DIP๋ฅผ ์ค๋ช ํ์๋ค.
- ๊ณ ์ฐจ์ ๋ชจ๋์ ์ ์ฐจ์ ๋ชจ๋์ ์์กดํ๋ฉด ์๋๋ค. ์ด ๋ ๋ชจ๋ ๋ชจ๋ ๋ค๋ฅธ ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค.
- ์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์๋๋ค. ๋ฐ๋๋ก ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค.
- ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ตฌํ์ฒด(Concrete) ํด๋์ค์ ์์กดํ์ง ๋ง๋ผ.
์ฝ๊ฒ ์ด์ผ๊ธฐํ๋ฉด, ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ง๋ค ๋ ์ค์ ๊ตฌํ๋ ๊ฐ์ฒด๊ฐ ์๋ ํด๋น ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ง ๋ณด๊ณ ์ค๊ณํ๋ผ๋ ๋ง์ด๋ค. ์ฆ ์ค์ ๋ด๋ถ ๊ตฌํ์ ๋ชจ๋ฅด๋๋ผ๋ ์ธํฐํ์ด์ค๋ง ๋ณด๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์ด๋ ๊ตฌํ๊ณผ ์ญํ ์ ๋ถ๋ฆฌ, ์ฆ ํด๋ผ์ด์ธํธ๊ฐ ์ญํ (Role)์ ์์กดํ๊ฒ ๋ง๋ค์ด์ผํ๋ค๋ ๋ง์ด๋ค. ์์์ ์ค๋ช ํ @OCP ์ฝ๋๋ฅผ ๋ค์ ์ดํด๋ณด๋ฉด ์ธํฐํ์ด์ค๊ฐ ์๋ ์ค์ ๊ฐ์ฒด์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ DIP๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฌ์ค ์ ์๊ฐํด๋ณด๋ฉด ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ์๋ฐ์ ๋คํ์ฑ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์ด๋์ ๋ ๋น์ทํ๊ฒ ๋ง๋ค ์๋ ์์ด๋, ์ค์ ์๋น์ค์์ ์์น์ ์๋ฒฝํ๊ฒ ์งํค๊ธฐ๋ ์๋นํ ์ด๋ ต๋ค. ํด๋ผ์ด์ธํธ์ ์ฝ๋์ ๋ณ๊ฒฝ์ ๋ง์๋ฒ๋ฆฌ๊ณ , ๊น๋ํ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ ๋ญ๊ฐ ๊ฐ์ฒด์งํฅ์ ๋์์ค ๋๊ตฌ๊ฐ ๋ ํ์ํ๋ค.
# ์คํ๋ง ํ๋ ์์ํฌ์ ๋ฑ์ฅ
๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฐ๋ฐ์๋ผ๋ฉด, ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ํฉ์ ๋ง์ดํ๋ค๋ณด๋ฉด ์์์ ํ๋ ๊ณ ๋ฏผ๋ค์ ํ๊ฒ๋๋ค. ์ฌ์ค ๋คํ์ฑ, ๊ฐ์ฒด์งํฅ์ 5์์น๋ ๋ง๋ง ๋ค๋ฅด์ง ์ด ๋ฐฉ๋ฒ๋ค์ด ์ถ๊ตฌํ๋ ๋ชฉํ๋ ๊ฐ๋ค.
ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ์์ด, ๋ถํ์ ๊ต์ฒดํ๋ฏ์ด ๊ฐ๋ฐํ๋ ์ง์ ํ ๊ฐ์ฒด์งํฅ
์คํ๋ง ํ๋ ์์ํฌ๋ ์์์ ๋งํ ๋คํ์ฑ + OCP, DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.
# ์ ๋ฆฌ
- ๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ์.
- ๊ณต์ฐ, ์ํ๊ฐ๋ ์ ๋น์ฅ ๋ฐฐ์ฐ๋ ์ดฌ์์ฅ์ ์บ์คํ ์ ์คํจํ๋ค๊ณ ํด์ ์ํ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฑด ์๋๋ค. ์ฑ ์ค๊ณ๋ ๊ณต์ฐ์ ํ๋ฏ์ด ๋ฐฐ์ญ๋ง ๋ง๋ค์ด๋๊ณ , ๋ฐฐ์ฐ๋ ์ธ์ ๋ ์ด ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ฌํ์.
ํ์ง๋ง ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด '์ถ์ํ ์ค๊ณ'๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์์ ์๋ค๋ฉด, ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ ํฅํ ๊ผญ ํ์ํ ๋ ๋ฆฌํํ ๋งํด์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฌํ ๊ฒ์ ์ํํธ์จ์ด์ ๊ธฐ์ ๋ถ์ฑ๋ผ๊ณ ๋งํ๊ธฐ๋ ํ๋ค. ๋น์ฆ๋์ค๊ฐ ์ปค์ง๋ฉด ์ธ์ ๊ฐ ๊ฐ์์ผํ ๊ธฐ์ ๋ถ์ฑ.
๊ฒฐ๊ตญ ์คํ๋ง ํ๋ ์์ํฌ๋, ์์ ๊ฐ์ ์์น๋ค์ ์ด์ฉํ์ฌ ๋คํ์ฑ์ ๊ตฌํํ ๊ฐ์ฒด์งํฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค.
'๐ฑ Spring Framework > Spring Core' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
IoC, DI, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋ (0) | 2021.08.02 |
---|---|
#4 ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(SOC), ์์กด์ฑ ์ฃผ์ (DI) (0) | 2021.08.02 |
#3 ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ์กด์ ๋ถํธํ ์ค๊ณ ๋ฐฉ์ (0) | 2021.08.01 |
#2 ์คํ๋ง ํ๋ก์ ํธ ์์ฑ (0) | 2021.07.25 |
#0 ์คํ๋ง, ์๋ฐ์ ๋ด์ด ์ค๊ธฐ๊น์ง (0) | 2021.07.25 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev