-
TIL(24์ผ์ฐจ)(2021.11.14)TIL(Today I Learned) 2021. 11. 14. 16:49
SOLID ๐
- SRP : ๋จ์ผ ์ฑ
์ ์์น
- Single Responsibility Principle
- ํ๋์ ํด๋์ค์๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋ค(์ฑ ์์ ํฌ๊ธฐ๋ ํด ์๋, ์์ ์๋ ์๋ค.)
- ์ค์ํ๊ฒ์ ๋ณ๊ฒฝ์ ํ๊ธ๋ ฅ์ด๋ค. ๋ณ๊ฒฝ์ ํ๊ธ์ด ์ ์ ์๋ก ๋จ์ผ ์ฑ ์ ์์น์ ์๋ฐ๋ฅธ๊ฒ์ด๋ค.
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น
- Open/Closed Principle
- ๊ฐ์ฅ ์ค์ํ ์์น
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋, ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ์ฆ, ์ฝ๋ ํ์ฅ์ ๊ฐ๋ฅํ์ง๋ง ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ญ์ค์ ์ธ ์๋ฏธ.
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค์ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ์ง๋ง, ์ธํฐํ์ด์ค ์์ฒด์ ๋ณ๊ฒฝ์ ์๋๋ค๋ ์๋ฏธ.
- ๋คํ์ฑ์ '์ญํ '๊ณผ '๊ตฌํ'์ ๋ถ๋ฆฌ
- ํ์ง๋ง! ๊ตฌํ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋๊ฒ๋ OCP๋ฅผ ์๋ฐํ๋ ํ์
- ๊ทธ๋ฌ๋ฏ๋ก Ioc์ DI ๋ฑ์ ์ค์ ํด์ค์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- Liskov Substitution Principle
- ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ง ํน์ฑ์ ๊ตฌํํ์ ๋, ๊ทธ ๊ตฌํ์ฒด์ ๊ธฐ๋ฅ์ด ์ธํฐํ์ด์ค ํน์ง๊ณผ ๋ค์ด๋ง์์ผํ๋ค.
- ์ฆ, ์๋์ฐจ ์ธํฐํ์ด์ค์ ๊ตฌํ์์ ์ก์ ์ ๊ตฌํํ ๋, ์ก์ ์ ๋ฐ์ ๋ ์์ผ๋ก ๊ฐ๋๊ฒ์ด ์๋ ํ์ง์ด ๋๋๊ฒ์ ๋ฐฉ์งํด์ผํ๋ค.
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- Interface Segregation Principle
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
- ์๋ก ์์ ๊ฑฐ ์ธํฐํ์ด์ค -> ์ฐ์ ์ฉ ์์ ๊ฑฐ, ๋ก๋ํ ์์ ๊ฑฐ, ํ์ด๋ธ๋ฆฌ๋ ์์ ๊ฑฐ๋ก ๋ถ๋ฆฌ
- ๋ถ๋ฆฌํ๋ฉด ๊ฐ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
- DIP ์์กด๊ด๊ณ ์ญ์ ์์น
- Dependency Inversion Principle
- ํ๋ก๊ทธ๋๋จธ๋ "์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค."
- ์ฆ, ํด๋ผ์ด์ธํธ๋ ์ธํฐํ์ด์ค์ ์์กดํด์ผ์ง ๊ตฌํ์ฒด์ ์์กดํด์ ์๋๋ค๋ ์๋ฏธ์ด๋ค.
public class MemberServic { private MemberRepository memberRepository = new MemoryMemberRepository(); }
- ์ ์ฝ๋์์ ์ธํฐํ์ด์ค ๋ฟ๋ง ์๋๋ผ ๊ตฌํ์ฒด์๋ ์์กดํ๊ณ ์๋ค. ๋๋ฌธ์ DIP๋ฅผ ์๋ฐํ๋ค.
๊ฒฐ๋ก ๐ฏ
- ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ๊ฐ๋ฐํ ์ ์๋ค.
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋, ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
- ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค.
์ข์ ๊ฐ์ฒด์งํฅ ์ค๊ณ ๐
- ๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํด๋๊ณ ๊ตฌํ์ฒด๋ ์ธ์ ๋ ์ง ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋๋๊ฒ์ด ๊ฐ์ฒด์งํฅ ์ค๊ณ์ด๋ค.
- ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ฌํ์.
but!
- ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์!
- ์ถ์ํ๋ ํด๋์ค๋ ๊ตฌํ์ฒด๋ฅผ ์ฐพ๋๋ฐ ์๊ฐ์ด ๋ฐ์
- ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์๊ฒ์ ๊ตฌํ์ฒด๋ก ๋ฐ๋ก ๊ตฌํํ๊ณ , ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒ์ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ๋๊ฒ์ด ์ข์.
์์ผ๋ก์ ๋ฐฉํฅ์ฑ ๐
- ์์ ์๋ฐ๋ก ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ํ ์ญํ ๊ณผ ๊ตฌํ์ ์ค๊ณํด๋ณด๊ณ
- DIP, OCP๋ฅผ ์ถฉ์กฑํ๋ ์ฝ๋๋ฅผ ์ง๋ณธ๋ค.
enum ๐
- ๊ด๋ จ์ด ์๋ ์์๋ค์ ์งํฉ.
- ์์๋ฅผ ์ ์ํ ๋ ๋ง์ด ์ฌ์ฉ
์ฌ์ฉ์ด์ : ์ฝ๋๊ฐ ๋จ์ํด์ง๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
์ธ์คํด์ค ์์ฑ๊ณผ ์์์ ๋ฐฉ์งํ๋ค.
๊ตฌํ์ ์๋๊ฐ ์ด๊ฑฐ์์ ๋ถ๋ช ํ๊ฒ ํ์ ํ ์ ์๋ค.ConcurrentHashMap<>() ๐
- ๋์ ์ ์์ด ๋ง์ ์ hashMap ๋์ ์ฌ์ฉ
- ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
// MemberServiceImpl private final MemberRepository memberRepository = new MemoryMemberRepository();
-> MemberRepository interface๋ง ์ฐธ์กฐํ๋ฉด Null ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ x
-> MemoryMemberRepository ๊ตฌํ์ฒด๋ฅผ ์ถ๊ฐํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ธ.'TIL(Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL(2021.11.16)(26์ผ์ฐจ) (0) 2021.11.16 TIL 25์ผ์ฐจ (2021.11.15) (0) 2021.11.15 TIL(23์ผ์ฐจ)(2021.11.13) (0) 2021.11.13 TIL(22์ผ์ฐจ)(2021.11.12) (0) 2021.11.12 TIL 21์ผ์ฐจ(11.11) (0) 2021.11.11 - SRP : ๋จ์ผ ์ฑ
์ ์์น