๐ ๋ชฉ์ฐจ.
12. ์ฐฝ๋ฐ์ฑ
.์ฐฝ๋ฐ์ ์ค๊ณ๋ก ๊น๋ํ ์ฝ๋๋ฅผ ๊ตฌํํ์.
.๋จ์ํ ์ค๊ณ ๊ท์น 1 : ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ผ
.๋จ์ํ ์ค๊ณ ๊ท์น 2~4 : ๋ฆฌํํฐ๋ง
.์ค๋ณต์ ์ ์ ๋ผ
.ํํํ๋ผ
.ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ
.๊ฒฐ๋ก
โ๏ธ ๋ด์ฉ.
12. ์ฐฝ๋ฐ์ฑ
.์ฐฝ๋ฐ์ ์ค๊ณ๋ก ๊น๋ํ ์ฝ๋๋ฅผ ๊ตฌํํ์.
1. ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ค.
2. ์ค๋ณต์ ์์ค๋ค
3. ํ๋ก๊ทธ๋๋จธ ์๋๋ฅผ ํํํ๋ค.
4. ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ธ๋ค.
์ผํธ ๋ฒก์ด ์ ์ํ ์์ 4๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅด๋ฉด ์ฐ์ํ ์ค๊ณ๊ฐ ๋์ค๊ณ , ์ฝ๋ ๊ตฌ์กฐ์ ์ค๊ณ๋ฅผ ํ์ ํ๊ธฐ ์ฌ์ฐ๋ฉฐ SRP, DIP ๊ฐ์ ์์น์ ์ ์ฉํ๊ธฐ ์ฌ์์ง๋ค. ๋ํ ์ค๊ณ๋ ๋จ์ํ๋ค๊ณ ๋งํ๋ค.
์์๋ ์ค์๋ ์์ด๋ค!
.๋จ์ํ ์ค๊ณ ๊ท์น 1 : ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ผ
๊ฒ์ฆ์ด ๋ถ๊ฐ๋ฅํ ์์คํ ์ ์ ๋ ์ถ์ํ๋ฉด ์ ๋๋ค. ํ ์คํธ๋ฅผ ์ฒ ์ ํ ๊ฑฐ์ณ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํญ์ ํต๊ณผํ๋ ์์คํ ์ 'ํ ์คํธ ๊ฐ๋ฅํ ์์คํ '์ด๋ค. ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ ์์คํ ์ ๊ฒ์ฆ๋ ๋ถ๊ฐ๋ฅํ๋ค.
SRP๋ฅผ ์ค์ํ๋ ํด๋์ค๋ ํ ์คํธ๊ฐ ์ฝ๋ค. ๊ฒฐํฉ๋๊ฐ ๋์ผ๋ฉด ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฐ์๋ DIP ๊ฐ์ ์์น์ ์ ์ฉํ๊ณ DI, ์ธํฐํ์ด์ค, ์ถ์ํ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
'ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๊ณ์ ๋๋ ค๋ผ'๋ผ๋ ๋จ์ ๊ฐ๋จํ ๊ท์น์ ๋ฐ๋ฅด๋ฉด ์์คํ ์ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋ ฅ์ด๋ผ๋, ๊ฐ์ฒด ์งํฅ ๋ฐฉ๋ฒ๋ก ์ด ์งํฅํ๋ ๋ชฉํ๋ฅผ ์ ์ ๋ก ๋ฌ์ฑํ๋ค.
.๋จ์ํ ์ค๊ณ ๊ท์น 2~4 : ๋ฆฌํํฐ๋ง
ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ์์ฑํ์๋ค๋ฉด ์ฝ๋๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฆฌ ํํฐ ๋ง ํด๋๊ฐ๋ค. ์ฝ๋ ๋ช ์ค์ ์ถ๊ฐํ ๋๋ง๋ค ์ ์ ๋ฉ์ถ๊ณ ์ค๊ณ๋ฅผ ์กฐ๊ฐํ๋ค.
์๋ก ์ถ๊ฐํ๋ ์ฝ๋๊ฐ ์ค๊ณ ํ์ง์ ๋ฎ์ถ๋๊ฐ? ๊ทธ๋ ๋ค๋ฉด ํ ์คํธ ์ผ์ด์ค๋ฅผ ํตํด ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊นจํธ๋ฆฌ์ง ์์๋ค๋ ์ฌ์ค์ ํ์ธํ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ธฐ์ ์์คํ ์ด ๊นจ์ง๊น ๊ฑฑ์ ํ ํ์ํ ํ์๊ฐ ์์ด์ง๋ค.
์ด ๋จ๊ณ์์๋ ์ํํธ์จ์ด ์ค๊ณ ํ์ง์ ๋์ด๋ ๊ธฐ๋ฒ์ด๋ผ๋ฉด ๋ฌด์์ด๋ ์ ์ฉํด๋ ์ข๋ค. ์์ง๋๋ฅผ ๋์ด๊ณ , ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ์์คํ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋๋๊ณ , ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ๋ ๋์ ์ด๋ฆ์ ์ ํํ๋ ๋ฑ ๋ค์ํ ๊ธฐ๋ฒ์ ๋์ํ๋ค. ๋ํ ๋จ์ํ ์ค๊ณ ๊ท์น ์ค ๋๋จธ์ง 3๊ฐ๋ฅผ ์ ์ฉํด ์ค๋ณต ์ ๊ฑฐ, ํ๋ก๊ทธ๋๋จธ ์๋ ํํ, ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ต์๋ก ์ค์ด๋ ๋จ๊ณ์ด๊ธฐ๋ ํ๋ค.
.์ค๋ณต์ ์ ์ ๋ผ
์ฐ์ํ ์ค๊ณ์์ ์ค๋ณต์ ์ปค๋ค๋ ์ ์ด๋ค. ์ถ๊ฐ ์์ , ์ถ๊ฐ ์ํ, ๋ถํ์ํ ๋ณต์ก๋๋ฅผ ๋ปํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ๋จํ ๋ฉ์๋ ์ค๋ณต ์ ๊ฑฐ์ ์๊ท๋ชจ ์ฌ์ฌ์ฉ๋ถํฐ Template Method ํจํด์ ์ฌ์ฉํ ๊ณ ์ฐจ์ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ํ์ฉํด๋ณธ๋ค.
.ํํํ๋ผ
์์คํ ์ด ๋ณต์กํด์ง๋ฉด์ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์๋ก ๋ณด์์ ๋ ์ ์ง๋ณด์ ๊ฐ๋ฐ์๊ฐ ์์คํ ์ดํดํ๋๋ผ ๋ณด๋ด๋ ์๊ฐ์ ์ ์ ์ฆ๊ฐํ๊ณ ์ฝ๋๋ฅผ ์คํดํ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ช ๋ฐฑํ๊ฒ ์ง์ผ ๋ค๋ฅธ ์ฌ๋์ด ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์์ง๋ฉด์ ๊ฒฐํจ์ด ์ค๊ณ ์ ์ง๋ณด์ ๋น์ฉ์ด ์ ๊ฒ ๋ ๋ค.
์ฒซ์งธ, ์ข์ ์ด๋ฆ์ ์ ํํ๋ค.
์ด๋ฆ๊ณผ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ํด๋์ค๋ ํจ์๋ก ๋๋ผ๊ฒ ํด์๋ ์๋๋ค.
๋์งธ, ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅํ ์ค์ธ๋ค.
์์ ํด๋์ค์ ์์ ํจ์๋ ์ด๋ฆ ์ง๊ธฐ๋ ์ฝ๊ณ , ๊ตฌํํ๊ธฐ๋ ์ฝ๊ณ , ์ดํดํ๊ธฐ๋ ์ฝ๋ค.
์ ์งธ, ํ์ค๋ช ์นญ์ ์ฌ์ฉํ๋ค.
์๋ก ๋์์ธ ํจํด์ ์์ฌ์ํต๊ณผ ํํ๋ ฅ ๊ฐํ๊ฐ ์ฃผ์ ๋ชฉ์ ์ด๋ค. ํด๋์ค๊ฐ Command๋ Visitor์ ๊ฐ์ ํ์ค ํจํด์ ์ฌ์ฉํด ๊ตฌํ๋๋ค๋ฉด ํด๋์ค ์ด๋ฆ์ ํจํด ์ด๋ฆ์ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ํด๋์ค ์ค๊ณ์๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
๋ท์งธ, ๋จ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ผผ๊ผผํ ์์ฑํ๋ค.
ํ ์คํธ ์ผ์ด์ค๋ ์์ '์์ ๋ก ๋ณด์ฌ์ฃผ๋ ๋ฌธ์'๋ค. ์ฆ, ์ ๋ง๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฝ์ด๋ณด๋ฉด ํด๋์ค ๊ธฐ๋ฅ์ด ํ๋์ ๋ค์ด์จ๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์์ ์ ์ํ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์. ๋์ ํ๋ฅ ๋ก ํ์ ์ฝ๋๋ฅผ ์ฝ์ ์ฌ๋์ ์์ ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ๊ณ ์์ ํญ๋ชฉ๋ค์ ์ค์ฒํ์.
.ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ
์ค๋ณต์ ๊ฑฐ, ์๋ ํํ, SRP ์ค์ ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๋ ๊ทน๋จ์ผ๋ก ์น๋ฌ์ผ๋ฉด ๋ ๋ณด๋ค ์ค์ด ํฌ๋ค. ํด๋์ค์ ๋ฉ์๋ ํฌ๊ธฐ๋ฅผ ์ค์ด์๊ณ ์กฐ๊ทธ๋ง ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ์์ด ๋ง๋๋ ์ฌ๋ก๋ ์์ง ์๋ค. ๊ทธ๋์ ์ด ๊ท์น์ ํจ์์ ํด๋์ค ์๋ฅผ ๊ฐ๋ฅํ ์ค์ด๋ผ๊ณ ์ ์ํ๋ค.
๋๋ก๋ ๋ฌด์๋ฏธํ๊ณ ๋ ๋จ์ ์ธ ์ ์ฑ ํ์ ํด๋์ค ์์ ๋ฉ์๋ ์๊ฐ ๋์ด๋๊ธฐ๋ ํ๋ค.
ํด๋์ค๋ง๋ค ๋ฌด์กฐ๊ฑด ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ผ๊ณ ์๊ตฌํ๋ ๊ตฌํ ํ์ค์ด ์ข์ ์๋ค. ์๋ฃ ํด๋์ค์ ๋์ ํด๋์ค๋ ๋ฌด์กฐ๊ฑด ๋ถ๋ฆฌํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๋ ๊ฒ ๋ํ ์ข์ ์๋ค. ๊ฐ๋ฅํ ๋ ๋จ์ ์ธ ๊ฒฌํด๋ ๋ฉ๋ฆฌํ๊ณ ์ค์ฉ ์ ์ธ ๋ฐฉ์์ ํํ๋ค.
๋ชฉํ๋ ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ์๊ฒ ์ ์งํ๋ฉด์ ๋์์ ์์คํ ํฌ๊ธฐ๋ ์๊ฒ ์ ์งํ๋ ๋ฐ ์๋ค. ํ์ง๋ง ์ด ๊ท์น์ ์์ ๋งํ 4 ๊ท์น ์ค ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๋ค. ๋ค์ ๋งํด, ํด๋์ค์ ํจ์ ์๋ฅผ ์ค์ด๋ ์์ ๋ ์ค์ํ์ง๋ง, ํ ์คํธ ์ผ์ด์ค, ์ค๋ณต ์ ๊ฑฐ, ์๋ ํํ์ด ๋จผ์ ์ด๋ค.
.๊ฒฐ๋ก
๊ฒฝํ๋งํ ๊ฐ๋ฐ ๊ธฐ๋ฒ์ ์๋ค. ํ์ง๋ง ์ด ์ฑ ์์ ์๊ฐํ๋ ๊ธฐ๋ฒ์ ์ ์๋ค์ ์์ญ ๋ ๊ฐ์ ๊ฒฝํ์ ์ ์์ด๋ค.
๋จ์ํ ์ค๊ณ ๊ท์น๋ง ๋ฐ๋ฅธ๋ค๋ฉด ์ค๋ ๊ฒฝํ ํ ์ตํ ์ฐ์ํ ๊ธฐ๋ฒ๊ณผ ์์น์ ๋จ๋ฒ์ ํ์ฉํ ์ ์๋ค.
๐ ๋๋์ .
1. ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ค.
2. ์ค๋ณต์ ์์ค๋ค
3. ํ๋ก๊ทธ๋๋จธ ์๋๋ฅผ ํํํ๋ค.
4. ํด๋์ค์ ๋ฉ์๋ ์๋ฅผ ์ต์๋ก ์ค์ธ๋ค.
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 4] 14. ์ ์ง์ ์ธ ๊ฐ์ (0) | 2022.08.10 |
---|---|
[Study][CleanCode - 3] 13. ๋์์ฑ (0) | 2022.08.10 |
[Study][CleanCode - 3] 11. ์์คํ (0) | 2022.08.04 |
[Study][CleanCode - 3] 10. ํด๋์ค (0) | 2022.08.01 |
[Study][CleanCode - 2] 9. ๋จ์ ํ ์คํธ (0) | 2022.07.17 |