๐ป ์คํ๋ง ํต์ฌ ๊ธฐ์ - ๊ธฐ์ด
ํด๋น ๊ฐ์๋ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ- ๊ธฐ์ด ๊ฐ์๋ฅผ ์๊ฐํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ๊ธฐ๋กํ๋ ๊ธฐ๋ก์ฅ
์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ธฐ์ด ๊ฐ์
๊ฐ์ฒด์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ค๊ณ์ 5๊ฐ์ง ์์น์ธ SOLID๋ฅผ ๋ค์ด๋ดค์ง๋ง ์ ํํ ์ด๋ค ์๋ฆฌ์ธ์ง๋ ๋ช
ํํ๊ฒ ๋ชจ๋ฅธ๋ค.
์ด๊ฑธ Spring ํต์ฌ ์๋ฆฌ๋ฅผ ํ์
ํ๊ธฐ ์ ์ ํ๋ฒ ๋ณด๊ณ ๋ค์ด๊ฐ๋ณด์
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
5๊ฐ์ง๋ ๊ฐ๊ฐ
SRP : ๋จ์ผ ์ฑ
์ ์์น (single responsibility principle)
OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open/closed principle)
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov substitution principle)
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface segregation principle)
DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency inversion principle)
์ด์ ๊ฐ๊ฐ ํ๋์ฉ ๋ฌด์จ ์์น์ธ์ง ์์๋ณด์
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผํ๋ค.
ํ๋์ ์ฑ
์์ ์ฌ์ค ๋ชจํธํ๋ค.
ํฐ ๊ฒฝ์ฐ๋ ์๊ณ ์์ ๊ฒฝ์ฐ๋ ์์
์ค์ํ ๊ธฐ์ค์ ๋ฐ๋ก ๋ณ๊ฒฝ
๋ณ๊ฒฝ์ด ์์๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ
์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
UI ๋ณ๊ฒฝ์ ๊ฐ์ฒด ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ๊ฒ
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค
ํ์ฅํ๋ ค๋ฉด ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ผํ๋๋ฐ ์ด๊ฒ ๋ฌด์จ ํ์๋ฆฌ๋ ๋ผ๊ณ ์๊ฐํ ์ ์๋ค
์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ๋ค์ ๋ ์ฌ๋ ค๋ณด์
๊ตฌํ์ฒด๊ฐ ๋ฐ๋๋ค๊ณ ํด๋ ์ญํ ์ ๋ฐ๋์ง ์๋๋ค.
์ฆ ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์๋ ์ด๋ ค์์ผ๋ ์ญํ ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ซํ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๊ธฐ๋ฅ ๊ตฌํ์ ๊ฐ๋ฅํ๋
๊ทธ ๊ตฌํ์ฒด๊ฐ ํ๋ ์ญํ ์์ฒด๋ ๋ฐ๋์ด์ ์๋๋ค
์ฆ ๋คํ์ฑ ์์ฒด๋ฅผ ์๋ฏธํ๋ ์์น์ด๋ค.
๋ฉค๋ฒ ์๋น์ค์์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ค.
๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ์์ JDBC ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ฉค๋ฒ ์๋น์ค์์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผํ๋๋ฐ ์ด๊ฑด OCP๋ฅผ ์๋ฐฐํ๋ค.
์ด ๋ฌธ์ ํด๊ฒฐ์ ์ํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ์กฐ๋ฆฝ ํ๋ ์ค์ ์๊ฐ ํ์
๐จ Spring ์ปจํ ์ด๋๊ฐ ์ญํ ์ ์ํ
ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ์ง ์๊ณ ํ์ ํ์
์ ์ธ์คํด์ค๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ์ง์ผ์ผํ๋ค๋ ๊ฒ
๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๊ธฐ ์ํจ
ex) ์๋์ฐจ ์์ ์ด ์์ผ๋ก ๊ฐ๋๊ฑฐ์ง ๋ค๋ก ๊ฐ๋ ์์ ์ ๋ง๋ค๋ฉด ์๋๋ ๊ฒ (์ปดํ์ผ ์ ๋ฌด์ ๋ฌธ์ ๊ฐ ์๋๋ค)
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋ ๋ณด๋ค ๋ซ๋ค
์์๋ฅผ ํตํด์ ์์๋ณด์
์๋์ฐจ ์ธํฐํ์ด์ค, ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋๊ฐ ๋ณด๋ค๋
๊ฐ๊ฐ ์ด์ ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์ง ๋ณด์ ๋ฉด์์๋ ์ข์
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ์ด์ ์ฌ, ์ ๋น์ฌ๋ก ๋๋๋ ๊ฒ์ด ๋ ์ข์
์ฆ ์ด๋ ๊ฒ ๋๋์ผ๋ก ์๋ก์ ํด๋ผ์ด์ธํธ๋ค์ ์ํฅ์ ์์ค
์ ๋นํ ๋จ์๋ฅผ ์ธํฐํ์ด์ฌ๋ฅด ์ ์ชผ๊ฐ๋๊ฒ ์ค์ํ๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผํ๋ฉฐ ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค.
๊ตฌํ ํด๋์ค๊ฐ ์๋๋ผ ์ธํฐํ์ด์ค์ ์์กดํด์ผํ๋ค.
์ฆ ๊ตฌํ์ฒด๊ฐ ์๋๋ผ ์ญํ ์ ์์กดํ๊ฒ ํด์ผํ๋ค๋ ๊ฒ์ด๋ค.
์๋์ฐจ ๋ผ๋ ์ญํ ์ด ์๋ค๊ณ ๊ฐ์ ํ์
์ฌ๊ธฐ์ ๊ตฌํ์ฒด๋ ๊ฐ๊ฐ ๋ฒค์ธ , K3, ํฐ์ฝ๊ฐ ์๋ค.
์ฌ๊ธฐ์ ๋ฒค์ธ ๋ผ๋ ๊ตฌํ์ฒด์ ์์กดํด์ ํ๊ฒ๋๋ฉด ํฐ์ฝ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ ์ง๋์น๊ฒ ๋ง์ ์ง ์ ์๋ค.
์ฆ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ์ฌ๋ฌ ๊ตฌํ์ฒด์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
์๋์ฐจ๋ ์์ , ๋ธ๋ ์ดํฌ, ํํน ๋ฑ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ์์ด์ผํ๋๋ฐ ๋ฒค์ธ ์ ์์กดํด์ ์๋จ, ์๋ผ์ด๋ ๋ทฐ ๋ฑ ์ด๋ฐ ๊ธฐ๋ฅ์ ์ง์คํ๋ฉด ์๋๋ค๋ ๊ฑฐ๋ค.
์ ๊ทธ๋ผ ์ฌ๊ธฐ์ ์์๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ํ์ธํ์
๋ฉ๋ชจ๋ฆฌ ๋ฆฌํฌ์งํ ๋ฆฌ, jdbc ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฉค๋ฒ ์๋น์ค๋ ์ธํฐํ์ด์ค์๋ ์์กดํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์์กดํ๋ ์ํฉ์ด๋ค.
๊ทธ๋๊น ์ธํฐํ์ด์ค๋ง ์๋๊ฒ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์๊ธฐ ๋๋ฌธ์ ์๋น์ค ์ฝ๋์์ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์
์ด ๋ฌธ์ ๋ DIP๋ฅผ ์๋ฐํ๋๋ฐ ์ด๊ฑธ ์ด๋ป๊ฒ ํด๊ฒฐํ๋
๋ค์ ๊ฐ์ํด์ ํ๋ค!!!๐ฅ
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ด๋ค.
์ 5๊ฐ์ง ์๋ฆฌ๋ ๋คํ์ฑ์ ๊ธฐ๋ฐํด์ ๋์จ ์์น์ด๋ผ๊ณ ๋ ํ ์ ์์
ํ์ง๋ง ๋คํ์ฑ๋ง์ผ๋ก๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝํด์ผํ๋๋ฐ ์ด๊ฒ ๋ฌธ์ ๋ก ์์ฉ๋๋ค.
์ด๋ฌ๋ฉด OCP ๋ DIP๋ฅผ ์งํค๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
์ด๊ฑธ Spring ์ด ํด๊ฒฐํด ์ฃผ๋๋ฐ ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์ผ๋ก Spring์ ๋ณด๋ฉด์ ์์๋ณด์