ํด๋น ๊ธ์ Robert C.Martin ํด๋ฆฐ ์ฝ๋ ๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ ์์ ํ์ธํด์ฃผ์ธ์.
ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ (Uncle Bob)
- ์ํค๋ถ์ค
- ์ง์์ด: Robert C.Martin (Uncle Bob)
- ์ฎ๊ธด์ด: ๋ฐ์ฌํธ, ์ดํด์
์ด๋ฒ ์ฅ์์ ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๊ฒ
ํด๋์ค ์ฒด๊ณ
- ์บก์ํ
- ๋ณ์๋ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ protected ๋ก ์ ์ธํ๋ค.
- ์บก์ํ๋ฅผ ํ์ด์ฃผ๋ ๊ฒ์ ์ธ์ ๋ ์ตํ์ ์๋จ์ด๋ค
ํด๋์ค๋ ์์์ผ ํ๋ค
- ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ฒซ ๋ฒ์งธ ๊ท์น์ ํฌ๊ธฐ์ด๋ค.
- ํด๋์ค๋ ์์์ผ ํ๋ค.
ํด๋์ค์ ์ด๋ฆ์ ํด๋น ํด๋์ค์ ์ฑ ์์ ๊ธฐ์ ํด์ผ ํ๋ค.
- ํด๋์ค ์ด๋ฆ์ ์๋ช ์ด์ผ๋ง๋ก ํด๋์ค๋ฅผ ์ค์ด๋ ์ฒซ๋ฒ์งธ ์ฒ๋์ด๋ค
- ํด๋์ค์ ์ด๋ฆ์ด ๋น์ฅ ๋ ์ค๋ฅด์ง ์๋๋ค๋ฉด ํด๋์ค๊ฐ ์ฌ๋ฌ ์ฑ ์์ ๊ฐ๊ณ ์๋ค๋ ๋ป์ด๋ค.
- ํด๋์ค ์ด๋ฆ์
Manager
,Processor
๋ฑ์ ๋ชจํธํ ํค์๋๊ฐ ์๋ค๋ฉด ์ฌ๋ฌ ์ฑ ์์ ๊ฐ๊ณ ์๋ค๋ ๋ป์ด๋ค. - ํด๋์ค์ ์ด๋ฆ์ if, and, or, but ์ ์ฌ์ฉํ์ง ์๊ณ 25๋จ์ด ๋ด์ธ๋ก ์ค๋ช ์ด ๊ฐ๋ฅํด์ผ ํ๋ค
๋จ์ผ ์ฑ ์ ์์น
- ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ์ด์ ๋ ๋จ ํ๋ ๋ฟ์ด์ด์ผ ํ๋ค.
- ๊ฐ์ฅ ์ฌ์ด ์์น์ด์ง๋ง ๊ฐ์ฅ ์ง์ผ์ง์ง ์๋ ์์น์ด๋ค
- ํฐ ํด๋์ค ๋ช๊ฐ๊ฐ ์๋ ์์ ํด๋์ค ์ฌ๋ฟ์ผ๋ก ๋๋์ด์ง ์์คํ ์ด ๋ฐ๋์งํ๋ค
- ์์ ํด๋์ค๋ ๋ค๋ฅธ ์์ ํด๋์ค์ ํ๋ ฅ์ ํตํด ํ์ํ ๋์์ ์ํํด ๋๊ฐ์ผ ํ๋ค.
์์ง๋
- ํด๋์ค๋ ์ธ์คํด์ค ๋ณ์ ์๊ฐ ์์์ผ ํ๋ค.
- ๋ฉ์๋๊ฐ ๋ณ์๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ ์๋ก ์์ง๋๊ฐ ๋๋ค
- ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์์ง๋๊ฐ ๋๋ค๊ณ ํด์ ์ข์ ํด๋์ค๋ ์๋๋ค
- ํด๋์ค๊ฐ ์ธ์คํด์ค ๋ณ์๋ฅผ ๋ง์ด ๊ฐ๊ณ ์๋ค๋ฉด ๋ถ๋ฆฌํด์ผํ ์ ํธ์ด๋ค
๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ํด๋์ค
- ์์คํ ์ ์ธ์ ๋ ๋ณํ์ ์ ๋์ฒํ ์ ์์ด์ผ ํ๋ค.
- ๋ณ๊ฒฝ์ ํ๊ธฐ ์ํด SRP ๋ฅผ ์ ๊ณ ๋ คํด๋ณด๋ผ
- ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ
- ๊ฐ์ฒด์งํฅ์์๋ ๊ตฌ์ฒด ํด๋์ค์ ์ถ์ ํด๋์ค๊ฐ ์กด์ฌํ๋ค.
- ๊ตฌ์ฒด ํด๋์ค : ์์ธํ ๊ตฌํ
- ์ถ์ ํด๋์ค : ๊ฐ๋ ๋ง ํํ
- ๊ตฌํ์ ์์กดํ๋ ํด๋ผ์ด์ธํธ๋ ๋ณ๊ฒฝ์ ์ทจ์ฝํ๋ค
- ์ฐ๋ฆฌ๋ ์ธํฐํ์ด์ค์ ์ถ์์ ์ด์ฉํด ์ํ์ ๋ฏธ์น๋ ์ํฅ์ ๊ฒฉ๋ฆฌํด์ผ ํ๋ค.
- ๊ฐ์ฒด์งํฅ์์๋ ๊ตฌ์ฒด ํด๋์ค์ ์ถ์ ํด๋์ค๊ฐ ์กด์ฌํ๋ค.
๋์ ํด์๊ณผ ํ๊ณ
์ง๊ธ๊น์ง ํด๋์ค ์ด๋ฆ์ ๋ํด์ ๊ณ ๋ฏผํด๋ณธ ์ ์ด ์์๊น?
๋ด ์น ๋ฐฑ์๋๋ Spring Layered Architecture ๋ก๋ถํฐ ์์๋์๋ค.
๋๋ฆฌ ์๋ ค์ ธ์๋ค ์ถ์ด Layered Architecture ์ ํน์ฑ์ ๋ฐ๋ผ์ ์ด์ฉ๋ฉด ์ ํด์ ธ์๋ ํด๋์ค๋ช ์ Entity ์ด๋ฆ๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ๋ง ํ์๋ค.
xxxService
, xxxController
, xxxRepository
์ฒ๋ผ ๋ง์ด๋ค.
์ด๋ ๊ฒฐ๊ตญ ์ด๋ค Entity ๊ฐ ๋ง๋ค์ด์ง๋ฉด ๋๋ฌด๋๋ ์์ฐ์ค๋ฝ๊ฒ Entity ์ ๋ฐ๋ฅธ Service, Controller, Repository ๊ฐ ์๊ฒจ๋ฌ์ผ๋ฉฐ ๊ทธ ํด๋์ค๋ค์ ์ฑ ์๊ณผ ์ญํ ์ ๋ํด์๋ ๊ณ ๋ฏผํ ์ฌ์ง์กฐ์ฐจ ์กด์ฌํ์ง ์์๋ค.
ํ์ง๋ง ์ต๊ทผ ๋ด๊ฐ ์ํ ํธ๋ ๋ฐ๋ฆฌ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๋๋ ๋ฐ๊ฐ ์๋ค.
Spring ์ ๊ทธ๋ฅ Spring ์ด๊ณ ๋ง๋ฅ์ด ์๋๋ค. ์ฆ, Spring ์ ๋๊ตฌ์ด๋ฉฐ ๊ทธ์ ์ํฅ์ ๋ฐ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
ํด๋น ํ๋ก์ ํธ์์๋ ์น ๋ฐฑ์๋๋ฅผ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ํ๋ก์ ํธ์์ง๋ง Spring ์ ๋ง์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๊ฐ๋ฐ์ ํ์๋ค.
๊ทธ์ ๋ฐ๋ผ์ ์์ฐ์ค๋ฝ๊ฒ Layered Architecture ์ด๋ผ๋ ์๊ฐ์ด ๋ฉ์ด์ก๊ณ ๊ฐ๊ฐ ํด๋์ค์ ์ด๋ฆ์ด ๊ฐ๊ณ ์๋ ์ฑ ์๊ณผ ์๋ฏธ์ ๋ํด์ ๊ฐ๋ฐ์ธ์ ์ฒ์์ผ๋ก ๊ณ ๋ฏผ์ ํด๋ดค์๋ค.
๋ง์ฝ ๊ทธ ๊ณผ์ ๋ค์ ๊ฒช์ง ์๊ณ ์ด๋ฒ ์ฑํฐ๋ฅผ ์ฝ์๋๋ผ๋ฉด ์๋ง ๋๋
xxxService
,xxxController
,xxxRepository
๋ฅผ ์ด๋ป๊ฒ ๋ ์ฑ ์๊ฐ์๊ฒ ์ด๋ฆ์ ์ง์ง?! ๋๋ฌด ์ถ์์ ์ธ ์ฑํฐ์ผ
ํ๊ณ ๋์ด๊ฐ์ ๊ฒ์ด๋ค.
๋๊ธ