๐ถ ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
1.SOLID๋
- SRP(The Single Responsibility) : ๋จ์ผ ์ฑ ์ ์์น
- OCP(The Open Closed Principle) : ๊ฐ๋ฐฉ ํ์ ์์น
- LSP(The Liskov Substitution Principle) : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ISP(The Interface Segregation Principle) : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- DIP(The Dependency Inversion Principle) : ์์กด๊ด๊ณ ์ญ์ ์์น
1) ๋จ์ผ ์ฑ ์ ์์น(SRP)
- ๋ชจ๋ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ง๋ฉฐ, ํด๋์ค๋ ๊ทธ ์ฑ
์์ ์์ ํ ์บก์ํ ํด์ผ ํ๋ค.
- ์ค๋ฌด์์๋ ์ฑ ์์ด๋ผ๋ ๊ฒ์ด ์ํฉ์ ๋ฐ๋ผ์ ๋ชจํธํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋์ ์ฑ ์๋ณด๋ค ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ผ๊ณ ๋ณธ๋ค.
- ๋ณ๊ฒฝ์ด ์์ ๋ ๊ทธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ํ๊ธํจ๊ณผ๊ฐ ์ ๋ค๋ฉด(=ํ ๋ถ๋ถ, ํ ํด๋์ค๋ง ๊ณ ์น๋ค๋ฉด) ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ผ ํ ์ ์๋ค.
2) ๊ฐ๋ฐฉ ํ์ ์์น(OCP)
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ๋ง๋ ์๋๋ ์๋ฆฌ๊ฐ์๋ฐ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ๊ฐ๋ฅํ๋ค.
public class MemberService{
private memberRepository memberRepository = new MemoryMemberRepository();
//๊ธฐ์กด ์ฝ๋๋ฅผ Jdbc์ฐ๊ฒฐ์ ์ํด์ ๋ณ๊ฒฝ์ ํด์ผ ํ๋ค๋ฉด
private memberRepository memberRepository = new JdbcMemberRepository();
// ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ์๋จ. -> OCP๊ฐ ๊นจ์ง๋ค.
}
- ๊ฐ์ฒด ์์ฑ, ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ ํ์ํ๋ค.
3) ๋ฆฌ์ค์ฝํ ์นํ ์์น(LSP)
- ์์ ํ์
์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์
์ ๊ฐ์ฒด๋ก ์นํํด๋ ์์ํ์
์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ๊ณผ ์ง์ฌ๊ฐํ์ ์์ ์์.
- ์์ ์ ๋ฐ์์ ๋๋ ์์ผ๋ก ๊ฐ์ผํ๋ค. ๋ค๋ก ๊ฐ๋ฉด LSP์๋ฐ.
4) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP)
- ๊ตฌํ์ฒด ์ค์ค๋ก๊ฐ ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฐ์ง ์์์ผ ํ๋ค.
- ํตํฉ์ ์ธ ๋ฒ์ฉ ์ธํฐํ์ด์ค๋ณด๋ค ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค.
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
5) ์์กด๊ด๊ณ ์ญ์ ์์น(DIP)
- ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํด์๋ ์๋๋ค. ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ์ถ์ํ๋ ์ธ๋ถ์ฌํญ์ ์์กดํ๋ฉด ์๋๋ค. ์ธ๋ถ์ฌํญ์ด ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ๊ตฌํ์ด ์๋ ์ญํ ์ ์์กดํด์ผ ํ๋ค๋ ๋ง. ๊ทธ๋์ผ ์ ์ฐํ๊ฒ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ถ ๋ง๋ฌด๋ฆฌ
- ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค!!
- ํ์ง๋ง ์ค๋ฌด์์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์ ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ํ๋จ๋๋ค๋ฉด ๊ตฌํ์ฒด ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๋์ค์ ํ์ํ ๋ ๋ฆฌํฉํ ๋ง์ ํตํด ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ ๊ฒ ์ข์ ๋ฏ ํ๋ค.
https://www.inflearn.com/course/์คํ๋ง-ํต์ฌ-์๋ฆฌ-๊ธฐ๋ณธํธ#
'Spring > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Framework] @ComponentScan (0) | 2023.04.10 |
---|---|
[Spring Framework] ์คํ๋ง ์ปจํ ์ด๋์ ์ฑ๊ธํค ์ปจํ ์ด๋ (0) | 2023.04.10 |
[Spring Framework] ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2023.04.06 |
[Spring Framework] IOC์ DI (0) | 2023.04.05 |
[Spring Framework] ์คํ๋ง ํ๋ ์์ํฌ๋ (0) | 2023.04.05 |