๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ?
ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ ์์ผ์ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ ,
๊ฐ์ฒด๋ค๊ฐ์ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
C++ / C# / Java / Python / JavaScript / Ruby / Swift ๋ฑ์ด ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
1. ์ถ์ํ
- ๊ฐ์ฒด์์ ๊ณตํต๋ ์์ฑ๊ณผ ํ์๋ฅผ ์ถ์ถ ํ๋ ๊ฒ
- ๊ณตํต์ ์์ฑ๊ณผ ํ์๋ฅผ ์ฐพ์์ ํ์ ์ ์ ์ํ๋ ๊ณผ์
- ์ถ์ํ๋ ๋ถํ์ํ ์ ๋ณด๋ ์จ๊ธฐ๊ณ ์ค์ํ ์ ๋ณด๋ง์ ํํํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ๊ฒ
1-1. ์ถ์ํ์ ํ์ ์ด์
- "๊ฐ์์ง"๋ผ๋ ํด๋์ค๊ฐ ์์ ๋ "ํธ๋ค"๋ง ์๋๊ฒ์ด ์๋๊ณ , "๋น์"์ด๋ผ๋ ํด๋์ค๊ฐ ์ถ๊ฐ๊ฐ ๋๋ค๋ฉด "๊ฐ์์ง"๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ถ์ํ ์์ผ๋์์ผ๋ก์จ ๋ค๋ฅธ๊ณณ์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์๋ก ๋ง๋ค ๋ถ๋ถ๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค.
2. ์บก์ํ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ค์ ๊ฒฐํฉ์์ผ ๋ฌถ๋ ๊ฒ(๋ณ์์ ํจ์๋ฅผ ํ๋๋ก ๋ฌถ๋๊ฒ์ ๋ปํจ)
- ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ
2-1. ์บก์ํ์ ์ฅ์
- ์์ฑ๊ณผ ํ์๋ฅผ ์ ์ํ๋ ๋ณ์์ ๋ฉ์๋๋ฅผ "ํด๋์ค"๋ผ๋ ์บก์์ ๋ฃ์ด ๋ถ๋ฅํ๋ ๊ฒ์ผ๋ก ์ฌํ์ฉ์ด ์ํํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ์บก์ํ๋ฅผ ํตํด์ ์ ๋ณด์๋์ ํ ์ ์๋ค.(์ด๊ฑด ์ ๊ทผ์ ์ด์ ํ์ฉ ํ์)
3. ์์
- ํด๋์ค์ ์์ฑ๊ณผ ํ์๋ฅผ ํ์ ํด๋์ค์ ๋ฌผ๋ ค์ฃผ๊ฑฐ๋ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์์ฑ๊ณผ ํ์๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋ปํ๋ค.
- ์๋ก์ด ํด๋์ค๊ฐ ๊ธฐ์กด์ ํด๋์ค์ ๋ฐ์ดํฐ์ ์ฐ์ฐ์ ์ด์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ
3-1. ์์์ ์ฅ์
- ์ฌ์ฌ์ฉ์ผ๋ก ์ธํ ์ฝ๋๊ฐ ์ค์ด๋ ๋ค.
- ๋ฒ์ฉ์ ์ธ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์์ฑ๊ณผ ํ์์ ์์ ๋ก์ด ์ฌ์ฉ ๋ฐ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
3-2. ์์์ ๋จ์
- ์์ ํด๋์ค์ ๋ณ๊ฒฝ์ด ์ด๋ ค์์ง๋ค.
- ๋ถํ์ํ ํด๋์ค๊ฐ ์ฆ๊ฐํ ์ ์๋ค.
4. ๋คํ์ฑ
- ํ๋์ ๋ณ์๋ช , ํจ์๋ช ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์ ๋ ์ ์๋ ๊ฒ
- ์ด๋ ํ ์์์ ์ฌ๋ฌ ๊ฐ๋ ์ ๋ฃ์ด ๋๋ ๊ฒ
- ํ๋์ ํด๋์ค ๋ด๋ถ์ ๊ฐ์ ์ด๋ฆ์ ํ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๊ฑฐ๋ ์์ ํด๋์ค์ ํ์๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ "๋คํ์ฑ"์ด๋ผ๋ ํน์ง์ ๊ฐ๊ฒ ๋๋ค.
4-1. ์ค๋ฒ๋ผ์ด๋ฉ
- ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ํ์๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ
4-2. ์ค๋ฒ๋ก๋ฉ
- ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์ธ์์ ๊ฐ์๋ ์๋ฃํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์
- ํด๋์ค ๋จ์๋ก ๋ชจ๋ํ์์ผ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ ๋ฌด ๋ถ๋ด์ด ํธ๋ฆฌํ๊ณ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ํฉํ๋ค.
- ํด๋์ค ๋จ์๋ก ์์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์๊ฐ ํธ๋ฆฌํ๋ค.
- ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์์์ ํตํด ํ์ฅํจ์ผ๋ก์จ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์
- ์ฒ๋ฆฌ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
- ๊ฐ์ฒด์ ์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ์ฉ๋์ด ์ปค์ง ์ ์๋ค.
- ์ค๊ณ์ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ๊ฒ ๋ ์ ์๋ค.
S.O.L.I.D (๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น)
1. ๋จ์ผ ์ฑ ์ ์์น (SRP / Single Responsibility Principle)
- ํ๋์ ํด๋์ค๋ ๋จ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ๋จ์ผ ์ฑ ์ ์์น์ ์งํค์ง ์์ ๊ฒฝ์ฐ ํ ์ฑ ์์ ๋ณ๊ฒฝ์ ์ํด ๋ค๋ฅธ ์ฑ ์๊ณผ ๊ด๋ จ๋ ์ฝ๋์ ์ํฅ์ด ๊ฐ ์ ์๋ค.
2. ๊ฐ๋ฐฉ-ํ์ ์์น (OCP / Open-Closed Principle)
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฝ๋๋ ์์ ํ์ง ์๋๋ค.
3. ๋ฆฌ์ค์ฝํ ์นํ ์์น (LSP / Liskov Subsitution Principle)
- ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
- ์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์ ์ ๊ฐ์ฒด๋ก ์นํํด๋, ์์ ํ์ ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
4. ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (ISP / Interface Segregation Principle)
- ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข๋ค.
- ์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ์์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
5. ์์กด๊ด๊ณ ์ญ์ ์์น (DIP / Dependency Inversion Principle)
- ์ถ์ํ์ ์์กดํด์ผ์ง ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค.
- ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ๊ตฌํ์ ์์กดํด์๋ ์๋๊ณ ์ ์์ค ๋ชจ๋์ ๊ณ ์์ค ๋ชจ๋์์ ์ ์ํ ์ถ์ํ์ ์ ์์กดํด์ผ ํ๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] : DI ์ IoC (0) | 2023.08.29 |
---|---|
[CS] : ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ ๋ฐ์ดํฐ ๋จ์ (0) | 2023.08.28 |
[CS] : TCP / UDP (0) | 2023.08.28 |
[CS] : ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ (0) | 2023.08.24 |