์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
solid ๋ ๋ฌด์์ธ๊ฐ
ใด ํด๋ฆฐ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ข์ ๊ฐ์ฒด ์งํฅ์ค๊ณ์ 5๊ฐ์ง๋ฅผ ์ ๋ฆฌ๋ฅผ ํ๋๋ฐ
์๋์ ๊ฐ์ด ์๊ธ์๋ง ๋ฐ์ SOLID ๋ผ๊ณ ํ๋ค .
1. SRP : ๋จ์ผ ์ฑ ์ ์์น (single resposibility principle)
2. OCP : ๊ฐ๋ฐ -ํ์ ์์น (open/closed principle)
3. LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น ( Liskov substitution Principle)
4. ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (interface segregation principle)
5. DIP : ์์กด๊ด๊ณ ์ญ์ ์์น ( Dependency inversion principle)
1. SRP : ๋จ์ผ ์ฑ ์ ์์น (single resposibility principle)
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผํ๋ค.
์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ์์๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ.
ex) UI ๋ณ๊ฒฝ, ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌ
2. OCP : ๊ฐ๋ฐ -ํ์ ์์น (open/closed principle)
์ ๋ง ์ค์ํ ์์น์ด๋ค.
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค. ๐ค์ฅ.. ์ด๊ฒ ๋ฌด์จ๋ง์ด์ง?
์ด๋ฌ์์ผ๋? ๋ซํ์์ด์ผํ๋ค..?
๋คํ์ฑ์ ๋ํด ๋ค์ ๋ณด์.
์ฌ๊ธฐ์ ํ์ฅ์ ์ด๋ ค์๊ณ ๋ณ๊ฒฝ์ ๋ซํ์๋ค ๋ผ๋ ์๋ฏธ๋ ๋คํ์ฑ์ ์๋ฏธ๋ฅผ ์๊ฐํ๋ฉด์ ์ดํดํ๋ฉด ๋๋ค...?...
์ธํฐํ์ด์ค๊ฐ ์๋์ฐจ ์ด์ ๋ฐฉ๋ฒ ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค๋ฉด ๊ฐ์๊ธฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ์์ k3 , ์๋ฐํ ๋ ๊ฐ์ ์๋์ฐจ ์ด์ ์ ์์ด ์ํฅ์ ๋ฏธ์น ์ ์๋ค...?....๐ ๊ทธ์น๋ง ์ฝ๋ ์์ ..๋ณ๊ฒฝ...์ ํด์ผ๋์ง ์์๊น..?
๋ถ๋ช ๋คํ์ฑ์ ์ฌ์ฉํ์ง๋ง OCP์์น์ ์งํฌ ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์กฐ๋ฆฝ, ์ค์ ์๊ฐ ํ์ํ๋ค๊ณ ํ๋ค.๐ฃ๐ค
<์ผ๋จ ๋์ค์ ์ด ๋ถ๋ถ์๋ํด ์ถ๊ฐ ์ค๋ช ํ ๊ธ์ ์ฌ๋ ค์ผ๊ฒ ๋ค. ์ผ๋จ PASS>
3. LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น ( Liskov substitution Principle)
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ผ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์์ ์ ๋ฐ์ผ๋ฉด ๋ค๋ก๊ฐ๊ฒ ๋๋ค๋ฉด..๋ฆฌ์ค์ฝํ ์นํ์์น์ ์๋ฐฐํ๊ฒ ๋๋ค.๋๋ฆฌ๊ฒ ๊ฐ๋๋ผ๋ ์์ผ๋ก ๊ฐ์ผํ๋ค๋ ๊ฒ์ด ๋ฆฌ์ค์ฝํ ์นํ ์์น์ด๋ค.
4. ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (interface segregation principle)
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
์๋์ฐจ๋ผ๋ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ฉด ,,
(1)์ด์ ์ธํฐํ์ด์ค , (2)์ ๋น ์ธํฐํ์ด์ค ๋ก ๋ถ๋ฆฌ ํด๋ณด์
์๋์ฐจ ์ธํฐํ์ด์ค ๋ ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ๋ถ๋ฆฌํ๋ค.
๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ๋ (1)์ด์ ์ ํด๋ผ์ด์ธํธ (2) ์ ๋น์ฌ ํด๋ผ์ด์ธํธ ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
5. DIP : ์์กด๊ด๊ณ ์ญ์ ์์น ( Dependency inversion principle)
ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค. // ์์กด์ฑ ์ฃผ์ ์ ์ด ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ์ค ํ๋์ด๋ค.
=> ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ , ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๋ป์ด๋ค.
๋ค์ ์ ๊ทธ๋ฆผ์ ๊ฐ์ง๊ณ ์ค๋ช ํ์๋ฉด ์ด์ ์๋ ์๋์ฐจ์ ์ญํ ์ ๋ํด์๋ง ์์์ผํ๋ค๋ ๊ฒ์ด๋ค.
์ด์ ์๊ฐ k3 , ์๋ฐ๋ผ์ ๋ํด ์ ํ์๊ฐ ์๋ค.
์ฌ๊ธฐ์ MemberService ๋ MemberRepository ๋ง ์๋ ๊ฒ์ด ์๋๋ผ MemorymemberRepository ๊น์ง ์๋๊ฒ์ด๋ค.
๊ทธ๋์ MemoryMemberRepository๋ฅผ ๋ด๊ฑธ๋ก ๋ฐ๊พธ๋ ค๊ณ ํ ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค.
๐ค DIP ์๋ฐ..?? ํผ๋์ค๋ฝ๋ค..๐ฃ๐ฃ
DIP๋ฅผ ๋ง์กฑํ๊ธฐ ์ํด์๋ MemberService ๊ฐ MemberRepository ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ํด๋์ค๋ฅผ ์ค๊ณํด์ผํ๋๋ฐ..
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ <๋ค์ ๊ธ์ ์ ๋ฆฌ>
์ ๋ฆฌ:
- ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ๊ฐ๋ฐํ ์ ์๋ค.
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
- ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP DIP๋ฅผ ์งํฌ ์ ์๋ค. ===> ๋ญ๊ฐ ๋ ํ์ํจ!!
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
์๋ ์๋ ๊ฐ๋ฐ์๋ค์ด ์ข์ ๊ฐ์ฒด ์งํฅ ๊ฐ๋ฐ์ ํ๊ธฐ์ํด OCP(๊ฐ๋ฐ-ํ์), DIP(์์กด๊ด๊ฒ ์ญ์ )์์น์ ์งํค๋ฉด์ ๊ฐ๋ฐ์ ํด๋ณด๋ ๋๋ฌด ํ ์ผ์ด ๋ง์๋ค. ===> ๊ทธ๋์ ํ๋ ์์ํฌ๋ก ๋ง๋ค์ด๋ฒ๋ ธ๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์ ์์ํ๊ฒ JAVA ๋ก OCP,DIP ์์น๋ค์ ์งํค๋ฉด์ ๊ฐ๋ฐ์ ํด๋ณด๋ฉด ๊ฒฐ๊ตญ์๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
(==DI ์ปจํ ์ด๋) //
์ ๋ฆฌ
1. ๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
2. ์์ ์ ๋ฆฌํ ๊ธ์์ ์๋์ฐจ, ๊ณต์ฐ์ ๋น์ ๋ก ํ๋๊ฒ์ ๋ ์ฌ๋ ค๋ณด์.
์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๋ ๊ณต์ฐ์ ์ค๊ณํ๋ฏ์ด ๋ฐฐ์ญ๋ง ๋ง๋ค์ด๋๊ณ , ๋ฐฐ์ฐ๋ ์ธ์ ๋ ์ง ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋๋๊ฒ์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ด๋ค.
3. ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ฌํ์
์ค๋ฌด ๊ณ ๋ฏผ
-> ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค. // ์ถ์ํ๊ฐ ๋๋ฉด ๋ค์ ์ฝ๋๋ฅผ ๋ค์ฌ๋ค ๋ณด์์ผ ํจ.
-> ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด, ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ , ํฅํ ๊ผญ ํ์ํ ๋ ๋ฆฌํฉํฐ๋งํด์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋๊ฒ๋ ๋ฐฉ๋ฒ์ด๋ค.
'Spring๐ > Spring ๊ธฐ๋ณธ๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ (0) | 2022.10.01 |
---|---|
ํ์ ๋๋ฉ์ธ ์คํ๊ณผ ํ ์คํธ (0) | 2022.09.25 |
ํ์ ๋๋ฉ์ธ ์ค๊ณ (3) | 2022.09.25 |
ํ๋ก์ ํธ ์์ฑ (1) | 2022.09.25 |
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง ์ ๋ฆฌ.txt๐ (2) | 2022.09.24 |