[Book] Clean Code: 10 ํด๋์ค
ํด๋ฆฐ ์ฝ๋
์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์
์ ์: ๋ก๋ฒํธ C. ๋งํด
10. ํด๋์ค
์๋ฐ ๊ด๋ก์ ๋ฐ๋ฅด๋ฉด ํด๋์ค๋ฅผ ์ ์ํ ๋ ์๋์ ์์๋ก ๋์จ๋ค.
- ๋ณ์ ๋ชฉ๋ก(์ ์ ๊ณต๊ฐ ์์ - ์ ์ ๋น๊ณต๊ฐ ๋ณ์ - ๋น๊ณต๊ฐ ์ธ์คํด์ค ๋ณ์)
- ๊ณต๊ฐ ํจ์
- ๋น๊ณต๊ฐ ํจ์(์์ ํธ์ถํ๋ ๊ณต๊ฐ ํจ์ ์งํ) ์ถ์ํ ๋จ๊ณ๊ฐ ์์ฐจ์ ์ผ๋ก ๋ด๋ ค๊ฐ์ ์ ๋ฌธ ๊ธฐ์ฌ์ฒ๋ผ ์ฝํ๋ค.
ํด๋์ค ์ฒด๊ณ
๊ฒฐํฉ๋๋ฅผ ์ต์๋ก ์ค์ด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋ ๋ค๋ฅธ ํด๋์ค ์ค๊ณ ์์น์ธ DIPDependency Inversion Principle
๋ฅผ ๋ฐ๋ฅด๋ ํด๋์ค๊ฐ ๋์จ๋ค. ๋ณธ์ง์ ์ผ๋ก DIP๋ ํด๋์ค๊ฐ ์์ธํ ๊ตฌํ์ด ์๋๋ผ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ์์น์ด๋ค.
์บก์ํ
์บก์ํ๋ฅผ ํ์ด์ฃผ๋ ๊ฒฐ์ ์ ์ธ์ ๋ ์ตํ์ ์๋จ์ด๋ค.
ํด๋์ค๋ ์์์ผ ํ๋ค!
ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ค.
ํด๋์ค ์ด๋ฆ์ ํด๋น ํด๋์ค ์ฑ ์์ ๊ธฐ์ ํด์ผ ํ๋ค. ์๋ช ์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์ฒซ ๋ฒ์งธ ๊ด๋ฌธ์ด๋ค.
๋จ์ผ ์ฑ ์ ์์น
ํด๋์ค๋ ๋ชจ๋์ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ๋จ ํ๋๋ฟ์ด์ด์ผ ํ๋ค๋ ์์น์ด๋ค.
๋๊ตฌ ์์๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์๊ฐ? ์์ ์๋์ ๋ง์ด ๋๊ณ ๊ธฐ๋ฅ๊ณผ ์ด๋ฆ์ด ๋ช ํํ ์ปดํฌ๋ํธ๋ฅผ ๋๋ ๋ฃ๊ณ ์ถ์๊ฐ? ์๋๋ฉด ํฐ ์๋ ๋ช ๊ฐ๋ฅผ ๋๊ณ ๋ชจ๋๋ฅผ ๋์ ธ ๋ฃ๊ณ ์ถ์๊ฐ?
์์ง๋Cohesion
ํด๋์ค๋ ์ธ์คํด์ค ๋ณ์ ์๊ฐ ์์์ผ ํ๋ค. ๊ฐ ํด๋์ค ๋ฉ์๋๋ ํด๋์ค ์ธ์คํด์ค ๋ณ์๋ฅผ ํ๋ ์ด์ ์ฌ์ฉํด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋๊ฐ ๋ณ์๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ ์๋ก ๋ฉ์๋์ ํด๋์ค๋ ์์ง๋๊ฐ ๋ ๋๋ค.
๋๋๋ก ๋ช๋ช ๋ฉ์๋๋ง์ด ์ฌ์ฉํ๋ ์ธ์คํด์ค ๋ณ์๊ฐ ์์ฃผ ๋ง์์ง๋ค. ์ด๋ ์ญ์คํ๊ตฌ ์๋ก์ด ํด๋์ค๋ก ์ชผ๊ฐ์ผ ํ๋ค๋ ์ ํธ๋ค. ์์ง๋๊ฐ ๋์์ง๋๋ก ๋ณ์์ ๋ฉ์๋๋ฅผ ์ ์ ํ ๋ถ๋ฆฌํด ์๋ก์ด ํด๋์ค ๋์ธ ๊ฐ๋ก ์ชผ๊ฐ์ค๋ค.
์์ง๋๋ฅผ ์ ์งํ๋ฉด ์์ ํด๋์ค ์ฌ๋ฟ์ด ๋์จ๋ค
ํฐ ํจ์๋ฅผ ์์ ํจ์ ์ฌ๋ฟ์ผ๋ก ์ชผ๊ฐ๋ค ๋ณด๋ฉด ์ข ์ข ์์ ํด๋์ค ์ฌ๋ฟ์ผ๋ก ์ชผ๊ฐค ๊ธฐํ๊ฐ ์๊ธด๋ค. ๊ทธ๋ฌ๋ฉด์ ํ๋ก๊ทธ๋จ์ ์ ์ ๋ ์ฒด๊ณ๊ฐ ์กํ๊ณ ๊ตฌ์กฐ๊ฐ ํฌ๋ช ํด์ง๋ค.
๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ํด๋์ค
OCP๋ ํด๋์ค๋ ํ์ฅ์ ๊ฐ๋ฐฉ์ ์ผ๊ณ ์์ ์ ํ์์ ์ด์ด์ผ ํ๋ค๋ ์์น์ด๋ค.
์ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ๋ ๊ฑด๋๋ฆด ์ฝ๋๊ฐ ์ต์์ธ ์์คํ ๊ตฌ์กฐ๊ฐ ๋ฐ๋์งํ๋ค.
์ด์์ ์ธ ์์คํ ์ด๋ผ๋ฉด ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ์์คํ ์ ํ์ฅํ ๋ฟ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ
ํ ์คํธ๊ฐ ๊ฐ๋ฅํ ์ ๋๋ก ์์คํ ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ฉด ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ๋ ๋์ฑ ๋์์ง๋ค. ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค๋ ์๋ฆฌ๋ ๊ฐ ์์คํ ์์๊ฐ ๋ค๋ฅธ ์์๋ก๋ถํฐ ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ์ ๊ฒฉ๋ฆฌ๋์ด ์๋ค๋ ์๋ฏธ๋ค. ์์คํ ์์๊ฐ ์๋ก ์ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉด ๊ฐ ์์๋ฅผ ์ดํดํ๊ธฐ๋ ๋ ์ฌ์์ง๋ค.
์ข ๋ ์ฐจ์ ๋์ ๋จ๊ณ๊น์ง ์ ๊ฒฝ ์จ๋ณด์.