โ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น (SOLID)
SOLID๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ค์ฏ ๊ฐ์ง ํต์ฌ ์์น์ ๋ํ๋ด๋ฉฐ, ์ฝ๋์ ์ ์ฐ์ฑ, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ๊ณ ์๋ ์์น๋ค์ด๋ค.
โ ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
- ์ ์ : ํด๋์ค๋ ์ค์ง ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ฉฐ, ๊ทธ ์ฑ ์์ ๋ณ๊ฒฝํ ์ด์ ๋ ํ๋๋ฟ์ด์ด์ผ ํ๋ค.
- ์ค๋ช : ํด๋์ค๊ฐ ๋จ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋๋ก ๋ถ๋ฆฌํด์ผ ๊ทธ ์ฑ ์์ด ๋ณํ ๋ ํด๋์ค์ ์ ์ง๋ณด์์ ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง๋ค.
โ ๊ฐ๋ฐฉ-ํ์ ์์น (Open/Closed Principle)
- ์ ์ : ์ํํธ์จ์ด ์ํฐํฐ(ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)๋ ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ์ค๋ช : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ด์ผ ํ๋ค. ์ด๋ ์ฃผ๋ก ์์์ด๋ ์ธํฐํ์ด์ค ๊ตฌํ์ ํตํด ๋ฌ์ฑ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด ๊ธฐ์กด ํด๋์ค์์ ์์๋ฐ์ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ธฐ์กด ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํด์ผ ํ๋ค.
โ ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
- ์ ์ : ์์ ํด๋์ค๋ ์ธ์ ๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋์ฒดํ ์ ์์ด์ผ ํ๋ค.
- ์ค๋ช : ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ ๋๋ก ๊ตฌํํ์ง ๋ชปํ๋ฉด, ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ์๊ธฐ์น ์์ ๋์์ ํ ์ ์๋ค. ๋ฐ๋ผ์, ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ณ์ฝ(๊ธฐ๋ฅ๊ณผ ์ ์ฝ)์ ์ง์ผ์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ์ฒด์ ๊ต์ฒด๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋๋ก ํด์ผ ํ๋ค.
โ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
- ์ ์ : ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค๋ ๋ฒ์ฉ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๋ก ๋๋์ด์ ธ์ผ ํ๋ค.
- ์ค๋ช : ํฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ, ๊ฐ ํด๋ผ์ด์ธํธ๋ ์์ ์ด ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ง ๊ตฌํํ๋ฉด ๋๋๋ก ํด์ผ ํ๋ค.
โ ์์กด ์ญ์ ์์น (Dependency Inversion Principle)
- ์ ์ : ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค. ๋ํ, ์ถ์ํ๋ ์ธ๋ถ์ฌํญ์ ์์กดํ์ง ๋ง์์ผ ํ๋ค.
- ์ค๋ช : ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์์กดํ์ง ์๊ณ , ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ ํด๋์ค๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ๋ฐ์์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌํ์ ์์กดํ๋ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํฐํ์ด์ค์ ์์กดํจ์ผ๋ก์จ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌํ์ ๊ต์ฒดํ ๋๋ ๋์ ์ ์ฐ์ฑ์ ์ ์งํ ์ ์๋ค.
'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ต๋ช ๋ฉ์๋, ๋๋ค ํํ์ (0) | 2024.08.29 |
|---|---|
| ์ด๋ฒคํธ(Event), ๋ธ๋ฆฌ๊ฒ์ดํธ(Delegate) (0) | 2024.08.29 |
| ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI) (0) | 2024.08.20 |
| ๋คํ์ฑ(Polymorphism), ๋ฐํ์ ๋คํ์ฑ, ์ปดํ์ผ ํ์ ๋คํ์ฑ (0) | 2024.08.20 |
| ์ถ์ ํด๋์ค(Abstract Class), ์ธํฐํ์ด์ค(Interface) (0) | 2024.08.20 |