๐ณ SOLID ์์น
์ค๋์ ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ์ 5๊ฐ์ง ์์น์ธ SOLID ์์น์ ๋ํด ๊ณต๋ถํด๋ณด์๋ค.
S,O,L,I,D ๋ ๊ฐ๊ฐ ๋จ์ด์ ์ฒซ ๊ธ์์ด๋ฉฐ ํฉํ์ฌ ์๋ฆฌ๋ ์์น์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ง๊ธ๋ถํฐ ์๋ฆฌ๋ ์์น์ ๋ํด ์์๋ณด์.
๐ฑ SRP ( Single Responsibility Principle )
SRP๋ Single Responsibility Principle ์ ์ฝ์์ด๋ฉฐ ๋ง๊ทธ๋๋ก
๋จ์ผ ์ฑ ์ ์์น์ ๋ปํ๋ค.
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค๋ ์์น์ด๋ค.
ํ๋์ ์ฑ ์์ด๋ผ๋ ๊ฒ์ ๊ต์ฅํ ๋ชจํธํ ํํ์ด๋ค.
"ํด ์๋ ์๊ณ ์์ ์๋" ์์ผ๋ฉฐ "๋ฌธ๋งฅ๊ณผ ์ํฉ์ ๋ฐ๋ผ" ๋ค๋ฅด๋ค.
์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ํฌ๋ค๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋๋ก ์งํค์ง ๋ชปํ ๊ฒ์ด ๋๋ค.
๐ฑ OCP ( Open Closed Principle )
OCP๋ Open Closed Principle ์ ์ฝ์๋ก ๊ฐ๋ฐฉ ํ์ ์์น์ ๋ปํ๋ค.
์ด๋ "์ํํธ์จ์ด๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค" ๋ ์์น์ด๋ค.
๐ฑ LSP ( Liskov Subsitution Principle )
LSP๋ Liskov Subsitution Principle ์ ์ฝ์์ด๋ฉฐ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ๋ปํ๋ค.
์ด ์์น์ด ์๋ฏธํ๋ ๋ฐ๋ ์๋์ ๊ฐ๋ค.
- ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค.
EX) ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ผ๋ ๊ธฐ๋ฅ, ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ฉด LSP ์๋ฐ
๐ฑ ISP ( Interface Segregation Principle )
ISP๋ Interface Segregation Principle ์ ์ฝ์๋ก ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ๋ปํ๋ค.
์ด ๊ท์น์ด ์๋ฏธํ๋ ๋ฐ๋ ์๋์ ๊ฐ๋ค.
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค๋ ํ๋์ ๋ฒ์ฉ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ซ๋ค.
- ์๋์ฐจ ์ธํฐํ์ด์ค -> ์ด์ , ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
- ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ -> ์ด์ ์, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌ
- ๋ถ๋ฆฌํ๋ฉด ์ ๋น ์ธํฐํ์ด์ค ์์ฒด๊ฐ ๋ณํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์์
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค
๐ฑ DIP ( Dependency Inversion Principle )
DIP๋ Dependency Inversion Principle ์ ์ฝ์๋ก ์์กด๊ด๊ณ ์ญ์ ์์น์ ๋ปํ๋ค.
์ด ์์น์ด ์๋ฏธํ๋ ๋ฐ๋ ์๋์ ๊ฐ๋ค.
ํ๋ก๊ทธ๋๋จธ๋ "๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํด์ผํ๋ค."
์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๊ตฌํ๋ ํด๋์ค๊ฐ ์๋ ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๋ป์ด๋ค.
์๋ฅผ ๋ค์ด ๋งํ๋ฉด ๋ชจ๋, ํ ์ฌ๋ผ, ์ ๋ค์์ค ๋ฑ์ ๊ตฌํ์ฒด๊ฐ ์๋ ์๋์ฐจ ๋ผ๋ ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๊ฒ์ด๋ค.
๐คทโ๏ธ ๋ฌธ์ ์ ?
์ผํ๋ณด๋ฉด ์์ ์์น์ผ๋ก ๊ฐ๋ฐ์ ํ๋ ๋ฐ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด์ง๋ง ๊ทธ๋ ์ง ์๋ค.
OCP๋ ํ์ฅ์๋ ์ด๋ ค์์ง๋ง ๋ณ๊ฒฝ์๋ ๋ซํ์๋ค ๋ผ๋ ์์น์ด๋ค.
ํ์ง๋ง
ํ์ฅ์ ํ๋ ค๋ฉด ๋น์ฐํ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ์๋๊ฐ?
๋คํ์ฑ์ ์ฌ์ฉํ๋ค๊ณ ํด๋
MemeberRepository m = new MemoryMemberRepository(); //๊ธฐ์กด ์ฝ๋
MemberRepository m = new JdbcMemberRepository(); //๋ณ๊ฒฝ ์ฝ๋
์ด๋ ๊ฒ ์ธํฐํ์ด์ค์ ์์กดํ์ง๋ง ๊ตฌํ์ฒด์๋ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด OCP๋ฟ๋ง ์๋๋ผ DIP๊น์ง ์๋ฐํ๊ฒ ๋๋ ๊ผด์ด๋ค.
"์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น" ์ ๋ํ ๋ถ๋ถ์ ์คํ๋ง์ DI์ IoC๊ฐ ์ ๊ณตํ๋ค.
๋ค์ ์๊ฐ์๋ ์คํ๋ง์ DI์ IoC์ ๋ํด ์์๋ณด๋ ์๊ฐ์ ๊ฐ๋๋ก ํ๊ฒ ๋ค.
๋ํ ์์ ์์์ ์ค๋ช ํ SOLID์์น์ ๊ฐ์ฒด์งํฅ์ ๊ณต๋ถํ๋ ๋ฐ์ ์ค์ํ ๋ด์ฉ์ด๋ฏ๋ก ์ ์์งํ๋๋ก ํ์
'Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] - Comparable ์ธํฐํ์ด์ค๋? (1) | 2023.01.21 |
---|---|
[JAVA] ObjectMapper๋ฅผ ํตํ ์์ฌ์ด ๊ฐ์ฒด ํ์ ๋ณํ (2) | 2022.09.17 |
[Java] ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฒ - Array, List, Map (3) | 2022.08.15 |
[JAVA] ์๋ฐ JVM, JRE, JDK ์ฐจ์ด (2) | 2022.01.20 |
[Java] ์๋์ฐ ์ค์ ์ผ๋ก CSV ํ์ผ ,(์ฝค๋ง) ๋ง๊ณ ๋ค๋ฅธ ๊ตฌ๋ถ์๋ก ๋ณ๊ฒฝํ๊ธฐ! (1) | 2021.12.13 |