๐๐ป SOLID 5์์น
1๏ธโฃ SRP (๋จ์ผ์ฑ ์์ ์์น)
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
์ ์
- ์์ฑ๋ ํด๋์ค๋ ํ๋์ ๊ธฐ๋ฅ๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ์๋น์ค๋ ํ๋์ ์ฑ ์์ ์ํํ๋ ๋ฐ ์ง์ค๋์ด ์์ด์ผ ํ๋ค.
- ์ด๋ค ๋ณํ์ ์ํด ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํ๋ค.
- SRP ์๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด ๋ฌด์๋ณด๋ค๋ ์ฑ ์ ์์ญ์ด ํ์คํด์ง๊ธฐ ๋๋ฌธ์ ํ ์ฑ ์์ ๋ณ๊ฒฝ์์ ๋ค๋ฅธ ์ฑ ์์ ๋ณ๊ฒฝ์ผ๋ก์ ์ฐ์ ์์ฉ์์ ์์ ๋ก์์ง ์ ์๋ค.
์ ์ฉ๋ฐฉ๋ฒ
- ์ฌ๋ฌ ์์ธ๋ค ์์ ํผ์ฌ๋
๊ฐ ์ฑ ์์ ๊ฐ๋ณ ํด๋์ค๋ก ๋ถํ
ํ์ฌ ํด๋์ค ๋น ํ๋์ ์ฑ ์๋ง์ ๋งก๋๋ก ํ๋ค.- ์ฌ๊ธฐ์ ๊ด๊ฑด์ ์ฑ
์๋ง ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ถ๋ฆฌ๋
๋ ํด๋์ค๊ฐ์ ๊ด๊ณ์ ๋ณต์ก๋๋ฅผ ์ค์ด๋๋ก ์ค๊ณํ๋ ๊ฒ
์ด๋ค. - ๋ง์ฝ ๊ฐ๊ฐ์ ํด๋์ค๋ค์ด ์ ์ฌํ๊ณ ๋น์ทํ ์ฑ
์์ ์ค๋ณตํด์ ๊ฐ๊ณ ์๋ค๋ฉด
Extract Superclass
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.Extract Superclass
๋ Extact๋ ๊ฐ๊ฐ์ ํด๋์ค๋ค์ ๊ณต์ ๋๋ ์์๋ฅผ ๋ถ๋ชจ ํด๋์ค๋ก ์ ์ํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ์์ํ๋ ๊ธฐ๋ฒ์ด๋ค.- ๋ฐ๋ผ์ ๊ฐ๊ฐ์ Extract class๋ค์ ์ ์ฌํ ์ฑ ์๋ค์ ๋ถ๋ชจ์๊ฒ ์์ํ๊ณ ๋ค๋ฅธ ์ฑ ์๋ค์ ๊ฐ๊ฐ์ class์๊ฒ ์ ์ํ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๊ด๊ฑด์ ์ฑ
์๋ง ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ถ๋ฆฌ๋
- ์ฐํ์ด ์์ (Shotgun surgery)
- Move Field์ Move Mehtod๋ฅผ ํตํด ์ฑ ์์ ๊ธฐ์กด์ ํด๋์ค๋ก ๋ชจ์ผ๊ฑฐ๋, ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด ํด๊ฒฐํ ์ ์๋ค.
- ์ฐ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๊ณณ์ ๋ถํฌ๋ ์ฑ ์๋ค์ ํ ๊ณณ์ ๋ชจ์ผ๋ฉด์ ์ค๊ณ๋ฅผ ๊นจ๋ํ๊ฒ ํ๋ค.
์ ์ฉ์ด์
- ํด๋์ค๋ ์์ ์ ์ด๋ฆ์ด ๋ํ๋ด๋ ์ผ์ ํด์ผํ๋ค.
- ์ฌ๋ฐ๋ฅธ ํด๋์ค ์ด๋ฆ์ ํด๋น ํด๋์ค์ ์ฑ ์์ ๋ํ๋ผ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ฐ ํด๋์ค๋ ํ๋์ ๊ฐ๋ ์ ๋ํ๋ด์ด์ผ ํ๋ค.
- ๋ฌด์กฐ๊ฑด ์ฑ
์์ ๋ถ๋ฆฌํ๋ค๊ณ SRP๊ฐ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋ค.
- ๊ฐ ๊ฐ์ฒด ๊ฐ์ ์์ง๋ ฅ์ด ์๋ค๋ฉด ๋ณํฉ์ด ์ ์์ฉ์ ์๋จ์ด ๋๊ณ ๊ฒฐํฉ๋ ฅ์ด ์๋ค๋ฉด ๋ถ๋ฆฌ๊ฐ ์ ์์ฉ์ ์๋จ์ด ๋๋ค.
2๏ธโฃ OCP (๊ฐ๋ฐฉ-ํ์ ์์น)
์ํํธ ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
์ ์
- ์ํํธ์จ์ด์ ๊ตฌ์ฑ์์๋ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค๋ ์๋ฆฌ๋ค.
- ๋ณ๊ฒฝ์ ์ํ ๋น์ฉ์ ๊ฐ๋ฅํ ์ค์ด๊ณ , ํ์ฅ์ ์ํ ๋น์ฉ์ ๊ฐ๋ฅํ ๊ทน๋ํ ํด์ผํ๋ค๋ ์๋ฏธ๋ค.
- ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ด๋ ์ถ๊ฐ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋, ๊ธฐ์กด ๊ตฌ์ฑ์์๋ ์์ ์ด ์ผ์ด๋์ง ๋ง์์ผ ํ๋ฉฐ, ์ฝ๊ฒ ํ์ฅํด์ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๋ป์ด๋ค.
- OCP๋ ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ธฐ๋ฐ์ด๋ฉฐ, OCP๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ ์ค์ ๋ฉ์ปค๋์ฆ์ ์ถ์ํ์ ๋คํ์ฑ์ด๋ค.
์ ์ฉ๋ฐฉ๋ฒ
- ๋ณ๊ฒฝ(ํ์ฅ)๋ ๊ฒ๊ณผ ๋ณํ์ง ์์ ๊ฒ์ ์๊ฒฉํ ๊ตฌ๋ถํ๋ค.
- ๊ตฌ๋ถํ ๋ ๋ชจ๋์ด ๋ง๋๋ ์ง์ ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ค.
- ๊ตฌํ์ ์์กดํ๊ธฐ๋ณด๋ค ์ ์ํ ์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์ ์ฉ์ด์
- ํ์ฅ๋๋ ๊ฒ๊ณผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ชจ๋์ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์์ ํฌ๊ธฐ ์กฐ์ ์ ์คํจํ๋ฉด ์คํ๋ ค ๊ด๊ณ๊ฐ ๋ ๋ณต์กํด์ง ์ ์๋ค.
- ์ธํฐํ์ด์ค๋ ๊ฐ๋ฅํ ๋ณ๊ฒฝ๋์ด์๋ ์๋๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ๋ ์ฌ๋ฌ ๊ฒฝ์ฐ์ ์์ ๋ํ ๊ณ ๋ ค์ ์์ธก์ด ํ์ํ๋ค.
- ์ธํฐํ์ด์ค ์ค๊ณ์์ ์ ๋นํ ์ถ์ํ ๋ ๋ฒจ์ ์ ํํด์ผํ๋ค. ์ฐ๋ฆฌ๋ ์ถ์ํ๋ผ๋ ๊ฐ๋
์ ‘๊ตฌ์ฒด์ ์ด์ง ์์' ์ ๋์ ์๋ฏธ๋ก ๋์จํ ๊ฐ๋
์ ๊ฐ๊ณ ์๋ค. ๊ทธ๋๋ ๋ถ์น๋
์ถ์ํ๋ ๋ค๋ฅธ ๋ชจ๋ ์ข ๋ฅ์ ๊ฐ์ฒด๋ก๋ถํฐ ์๋ณ๋ ์ ์๋ ๊ฐ์ฒด์ ๋ณธ์ง์ ์ธ ํน์ง
์ด๋ผ๊ณ ์ ์ํ๋ค. ์ฆ, ์ด ํ์์ ๋ํ ๋ณธ์ง์ ์ธ ์ ์๋ฅผ ํตํด ์ธํฐํ์ด์ค๋ฅผ ์๋ณํด์ผ ํ๋ค.
3๏ธโฃ LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น)
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
์ ์
- LSP๋ฅผ ํ๋ง๋๋ก ํ๋ค๋ฉด
์๋ธ ํ์ ์ ์ธ์ ๋ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค.
๋ผ๊ณ ํ ์ ์๋ค. ์ฆ, ์๋ธ ํ์ ์ ์ธ์ ๋ ๊ธฐ๋ฐ ํ์ ๊ณผ ํธํ๋ ์ ์์ด์ผํ๋ค. - ์๋ธ ํ์
์ ๊ธฐ๋ฐ ํ์
์ด ์ฝ์ํ ๊ท์ฝ(public ์ธํฐํ์ด์ค, ๋ฉ์๋๊ฐ ๋์ง๋ ์์ธ ํฌํจ)์ ์ง์ผ์ผ ํ๋ค.
- ์์์ ๊ตฌํ์์์ด๋ ์ธํฐํ์ด์ค ์์์ด๋ ๊ถ๊ทน์ ์ผ๋ก๋ ๋คํ์ฑ์ ํตํ ํ์ฅ์ฑ ํ๋์ ๋ชฉํ๋ก ํ๋ค.
- LSP์๋ฆฌ๋ ์ญ์ ์๋ธ ํด๋์ค๊ฐ ํ์ฅ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ค์ํด์ผ ํจ์ ์๋ฏธํ๋ค.
- ๋คํ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ทน๋ํ ํ๋ ค๋ฉด ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ์์์ ํด๋์ค(์ธํฐํ์ด์ค)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
์ ์ฉ๋ฐฉ๋ฒ
- ๋ง์ฝ ๋ ๊ฐ์ฒด๊ฐ ๋๊ฐ์ ์ผ์ ํ๋ค๋ฉด ๋์ ํ๋์ ํด๋์ค๋ก ํํํ๊ณ ์ด๋ค์ ๊ตฌ๋ถํ ์ ์๋ ํ๋๋ฅผ ๋๋ค.
- ๋๊ฐ์ ์ฐ์ฐ์ ์ ๊ณตํ์ง๋ง, ์ด๋ค์ ์ฝ๊ฐ์ฉ ๋ค๋ฅด๊ฒ ํ๋ค๋ฉด ๊ณตํต์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๋์ด ์ด๋ฅผ ๊ตฌํํ๋ค.
- ๊ณตํต๋ ์ฐ์ฐ์ด ์๋ค๋ฉด ์์ ๋ณ๊ฐ์ธ 2๊ฐ์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- ๋ง์ฝ ๋ ๊ฐ์ฒด๊ฐ ํ๋ ์ผ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ ํ๋ค๋ฉด ๊ตฌํ ์์์ ์ฌ์ฉํ๋ค.
์ ์ฉ์ฌ๋ก
- LSP ์ ์ฉ ์
void f() {
LinkedList lis = new LinkedList();
// ...
modify(list);
}
void modify(LinkedList list) {
list.add(...);
doSomethingWith(list);
}
List๋ง ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด ์ ์ฝ๋๋ ๋ฌธ์ ๋ ์๋ค.
ํ์ง๋ง ๋ง์ฝ ์๋ ๊ฐ์ ์ ์ํด HashSet
์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด LinkedList
๋ฅผ ๋ค์ HashSet
์ผ๋ก ์ด๋ป๊ฒ ๋ฐ๊ฟ ์ ์์๊น?
LinkedList
์ HashSet
์ ๋ชจ๋ Collection
์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ณ ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
- LSP ์ ์ฉ ํ
void f() {
Collection collection = new HashSet();
//...
modify(list);
}
void modify(Collection collection) {
collection.add(...);
doSomethingWith(collection);
}
์ด์ Collection ์์ฑ ๋ถ๋ถ๋ง ๊ณ ์น๋ฉด ๋ง์๋๋ก ์ด๋ค Collection ๊ตฌํ ํด๋์ค๋ ์ฌ์ฉํ ์ ์๋ค.
์ปฌ๋ ์
ํ๋ ์์ํฌ๊ฐ LSP๋ฅผ ์ค์ํ์ง ์์๋ค๋ฉด Collection
์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํํ๋ ๋ฒ์ฉ ์์
์ด ์ ๋๋ก ์ํ๋ ์ ์๋ค.
ํ์ง๋ง ๋ชจ๋ LSP๋ฅผ ์ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค์ ์ ์ธํ ๋ชจ๋ Collection
์ฐ์ฐ์์๋ modify()
๊ฐ ์ ๋์ํ๊ฒ ๋๋ค.
์ด๋ฅผ ํตํด modify()
๋ ๋ณํ์ ๋ซํ ์์ผ๋ฉด์, ์ปฌ๋ ์
์ ๋ณ๊ฒฝ๊ณผ ํ์ฅ์๋ ์ด๋ ค ์๋ ๊ตฌ์กฐ(OCP)
๊ฐ ๋๋ค.
์ ์ฉ์ด์
- ํผ๋๋ ์ฌ์ง๊ฐ ์๊ณ ํธ๋ ์ด๋ ์คํ๋ฅผ ๊ณ ๋ คํด ์ ํํ ๊ฒ์ด๋ผ๋ฉด ๊ทธ๋๋ก ๋๋ค.
- ๋คํ์ฑ์ ์ํ ์์๊ด๊ณ๊ฐ ํ์ ์๋ค๋ฉด Replace with Delegation์ ํ๋ค. ์์์ ๊นจ์ง๊ธฐ ์ฌ์ด ๊ธฐ๋ฐ ํด๋์ค ๋ฑ์ ์ง๋๊ณ ์์ผ๋ฏ๋ก IS-A๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋์ง ์๋๋ค.
- LSP๋ฅผ ์งํค๊ธฐ ์ด๋ ต๋ค๋ฉด ์์๋์ ํฉ์ฑ(composition)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ์์ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค๋ฉด Extract Subclass, Push Down Field, Push Down Method ๋ฑ์ ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฒ์ ์ด์ฉํ์ฌ LSP๋ฅผ ์ค์ํ๋ ์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ค.
- IS-A๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค๊ณ ํ๋ก๊ทธ๋จ๊น์ง ๊ทธ๋ฐ ๊ฒ์ ์๋๋ค. ์ด๋ค๊ฐ์ ๊ด๊ณ๋ ์ด๋ค์ ์ญํ ๊ณผ ์ด๋ค ์ฌ์ด์ ๊ณต์ ํ๋ ์ฐ์ฐ์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ฐ์ฐ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋ฑ์ ์ข ํฉ์ ์ผ๋ก ๊ฒํ ํด๋ด์ผ ํ๋ค.
- ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ์๋ธ ํด๋์ค๋ก ์นํ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ๋ฐ์๋ค์ด๋ ์ ์กฐ๊ฑด์์ ์๋ธ ํด๋์ค์ ์ ์ฝ์ฌํญ์ด ๊ธฐ๋ฐ ํด๋์ค์ ์ ๋ฐ ์ฌํญ๋ณด๋ค ๋์จํ๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
- ๋ง์ฝ ์ ์ฝ์กฐ๊ฑด์ด ๋ ๊ฐํ๋ค๋ฉด ๊ธฐ๋ฐ ํด๋์ค์์ ์คํ๋๋ ๊ฒ์ด ์๋ธ ํด๋์ค์ ๊ฐ ์กฐ๊ฑด์ผ๋ก ์ธํด ์คํ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
4๏ธโฃ ISP (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
์ ์
- ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ๋ง์์ผ ํ๋ค๋ ์๋ฆฌ๋ค.
- ์ด๋ค ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์ข ์๋ ๋์๋ ๊ฐ๋ฅํ ์ต์ํ์ ์ธํฐํ์ด์ค๋ง์ ์ฌ์ฉํด์ผ ํ๋ค.
- ISP๋ฅผ
ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค๋, ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค
๋ผ๊ณ ์ ์ํ ์ ์๋ค.
์ ์ฉ๋ฐฉ๋ฒ
- ํด๋์ค ์ธํฐํ์ด์ค๋ฅผ ํตํ ๋ถ๋ฆฌ
- ํด๋์ค์ ์์์ ์ด์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ๋๋ ์ ์๋ค.
- ์ด์ ๊ฐ์ ๊ตฌ์กฐ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณํ๋ฅผ ์ฃผ์ง ์์ ๋ฟ ์๋๋ผ ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค.
- ๊ฐ์ฒด ์ธํฐํ์ด์ค๋ฅผ ํตํ ๋ถ๋ฆฌ
- ์์(Delegation)์ ์ด์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ๋๋ ์ ์๋ค.
- ์์์ด๋, ํน์ ์ผ์ ์ฑ
์์ ๋ค๋ฅธ ํด๋์ค๋ ๋ฉ์๋์ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค. ๋ง์ฝ
๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ์ง๋ง, ๊ทธ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์๋ค๋ฉด
์์ ๋์์์
์ ์ฌ์ฉํ๋ค.
์ ์ฉ์ฌ๋ก
- Java Swing์ JTable
import javax.swing.event.*;
import javax.swing.table.TableModel;
public class SimpleTableDemo ... implements TableModelListener {
...
public SimpleTableDemo() {
...
table.getModel().addTableModelListener(this);
...
}
//์ธํฐํ์ด์ค๋ฅผ ํตํด ๋
ธ์ถํ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
...// Do something with the data...
}
...
}
JTable ํด๋์ค์๋ ๊ต์ฅํ ๋ง์ ๋ฉ์๋๋ค์ด ์๋ค.
JTable์ ISP๊ฐ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ๋ฅผ ํตํด ํน์ ์ญํ ๋ง์ ์ด์ฉ
ํ ์ ์๊ฒ ํด์ค๋ค.
์ ์ฉ์ด์
- ๊ธฐ ๊ตฌํ๋ ํด๋ผ์ด์ธํธ์ ๋ณ๊ฒฝ์ ์ฃผ์ง ๋ง์์ผ ํ๋ค.
- ๋ ๊ฐ ์ด์์ ์ธํฐํ์ด์ค๊ฐ ๊ณต์ ํ๋ ๋ถ๋ถ์ ์ฌ์ฌ์ฉ ๊ทน๋ํํ๋ค.
- ์๋ก ๋ค๋ฅธ ์ฑ๊ฒฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ช ๋ฐฑํ ๋ถ๋ฆฌํ๋ค.
5๏ธโฃ DIP (์์กด๊ด๊ณ ์ญ์ ์์น)
ํ๋ก๊ทธ๋๋จธ๋ “์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค" ์์กด์ฑ ์ฃผ์ ์ ์ด ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ์ด๋ค.
์ ์
- ์์กด ๊ด๊ณ์ ์ญ์ Dependency Inversion ์ด๋ ๊ตฌ์กฐ์ ๋์์ธ์์ ๋ฐ์ํ๋ ํ์ ๋ ๋ฒจ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์์ ๋ ๋ฒจ ๋ชจ๋์ ๋ณ๊ฒฝ์ ์๊ตฌํ๋ ์๊ณ๊ด๊ณ๋ฅผ ๋๋ ์๋ฏธ์ ์ญ์ ์ด๋ค.
- ์ค์ ์ฌ์ฉ ๊ด๊ณ๋ ๋ฐ๋์ง ์์ผ๋ฉฐ, ์ถ์์ ๋งค๊ฐ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ๋ก์จ ๊ด๊ณ๋ฅผ ์ต๋ํ ๋์จํ๊ฒ ๋ง๋๋ ์์น์ด๋ค.
- DIP๋ ๋ณต์กํ๊ณ ์ง๋ํ ์ปดํฌ๋ํธ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ๊ด๊ณ๋ฅผ ๋จ์ํํ๊ธฐ ์ํ ์์น์ด๋ค.
์์๋ ๋ฒจ์ ๋ชจ๋์ด ํ์ ๋ ๋ฒจ์ ๋ชจ๋์ ์์กดํ์ง ์์์ผ ํ๋ค.
์ ์ฉ๋ฐฉ๋ฒ
- Layering
- ์ ๊ตฌ์กฐํ๋ ๊ฐ์ฒด์งํฅ ์ํคํ
์ฒ๋ค์ ๊ฐ ๋ ์ด์ด๋ง๋ค ์ ์ ์๋๊ณ ํต์ ๋๋ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ธด๋ฐํ ์๋น์ค๋ค์ ์งํฉ์ ์ ๊ณตํ๋ ๋ ์ด์ด๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์ด๊ฒ์ ๋จ์ํ ๋ ์ด์ด๋ฅผ ํตํ ๊ตฌ์กฐํ ๋ง์ ๋ปํ๋ ๊ฒ์ด ์๋๋ผ, Transitive Dependency๊ฐ ๋ฐ์ํ์ ๋ ์์ ๋ ๋ฒจ์ ๋ ์ด์ด๊ฐ ํ์ ๋ ๋ฒจ์ ๋ ์ด์ด๋ฅผ ๋ฐ๋ก ์์กดํํ๊ฒ ํ๋ ๊ฒ๋ ์๋, ๋ ์ฌ์ด์ ์กด์ฌํ๋ ์ถ์๋ ๋ฒจ์ ํตํด ์์กดํด์ผ ํ ๊ฒ์ ๋งํ๊ณ ์๋ค.
- ์ด๋ฅผ ํตํด์ ์์ ๋ ๋ฒจ์ ๋ชจ๋์ ํ์ ๋ ๋ฒจ์ ๋ชจ๋๋ก์ ์์กด์ฑ์์ ๋ฒ์ด๋ ๊ทธ ์์ฒด๋ก ์ฌ์ฌ์ฉ๋๊ณ ํ์ฅ์ฑ๋ ๋ณด์ฅ๋ฐ์ ์ ์๋ค.
์ ์ฉ์ฌ๋ก
- ํต์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
- ์ด๋ฒคํธ ๋๋ฆฌ๋ธ, ์ฝ๋ฐฑ ๊ทธ๋ฆฌ๊ณ JMS ๋ชจ๋ธ
์ถ์ฒ
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DICOM-2] DICOM ํ์ผ ๊ตฌ์กฐ (0) | 2025.01.01 |
---|---|
[DICOM-1] DICOM์ด๋? (0) | 2024.12.31 |