์ข์ ์ฝ๋๋ '๋จ์ํจ'์์ ๋์ต๋๋ค
์ํํธ์จ์ด ๊ณตํ์์ '๋ณต์ก๋'๋ ๋ฒ๊ทธ์ ์จ์๊ณผ ๊ฐ์ต๋๋ค. ํ ๋ง์ค ๋งฅ์ผ์ด๋ธ(Thomas J. McCabe)๊ฐ ์ ์ํ **์ํ ๋ณต์ก๋(Cyclomatic Complexity)**๋ ํ๋ก๊ทธ๋จ์ ๋ ผ๋ฆฌ์ ์ธ ํ๋ฆ์ด ์ผ๋ง๋ ๊ผฌ์ฌ ์๋์ง๋ฅผ ์ ๋์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์งํ์ ๋๋ค. ํ๋์ ํจ์์ ๋๋ฌด ๋ง์ `if`, `else`, `switch`๋ฌธ์ด ์ค์ฒฉ๋์ด ์๊ฑฐ๋ ๋ณต์กํ ๋ฃจํ๊ฐ ์ฝํ ์๋ค๋ฉด, ๊ทธ ์ฝ๋๋ ์ฝ๊ธฐ ํ๋ค ๋ฟ๋ง ์๋๋ผ ์์ ์ ๊ฐํ์ ๋ ์์์น ๋ชปํ ์ฌ์ด๋ ์ดํํธ(Side Effect)๋ฅผ ์ผ์ผํฌ ํ๋ฅ ์ด ๋งค์ฐ ๋์ต๋๋ค.
๋ณธ ๋๊ตฌ๋ ์ ๋ ฅ๋ ์ฝ๋ ๋ด์์ ์คํ ๊ฒฝ๋ก๋ฅผ ๋๋๋ ์ฃผ์ ํค์๋๋ค์ ๋ถ์ํ์ฌ ๋ณต์ก๋ ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ ์๊ฐ 1~10 ์ฌ์ด๋ผ๋ฉด ๋งค์ฐ ์ ๊ตฌ์กฐํ๋ ์ฝ๋์ด๋ฉฐ, 11~20 ์ฌ์ด๋ผ๋ฉด ๋ณต์กํด์ง๊ธฐ ์์ํ์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ๋ง์ฝ ์ ์๊ฐ 20์ ์ด๊ณผํ๋ค๋ฉด, ํด๋น ํจ์๋ ๋๋ฌด ๋ง์ ์ฑ ์์ ์ง๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ์ด ๊ฒฝ์ฐ ํฐ ํจ์๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐ๋ 'ํจ์ ์ถ์ถ(Extract Method)' ๋ฆฌํฉํ ๋ง์ด ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค.
๋ฎ์ ๋ณต์ก๋๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋จ์ํ ์ฝ๋๋ฅผ ์์๊ฒ ๋ง๋๋ ์์ ์ด ์๋๋๋ค. ๋ณต์ก๋๊ฐ ๋ฎ์์๋ก ํ ์คํธ ์ผ์ด์ค ์์ฑ์ด ์ฌ์์ง๋ฉฐ, ์๋ก์ด ํ์์ด ํ๋ก์ ํธ์ ํฉ๋ฅํ์ ๋ ์ฝ๋๋ฅผ ์ดํดํ๋ ์๊ฐ์ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ์ค๋๋ค. ์ง๊ธ ๋ฐ๋ก ์ฌ๋ฌ๋ถ์ด ์์ฑํ ํต์ฌ ๋ก์ง์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ด ๋ณด์ธ์. ์ซ์๋ก ๋ํ๋๋ ๋ณต์ก๋ ์ ์๊ฐ ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ฅผ ๋ ํด๋ฆฐํ๊ณ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋๋ ๊ฐ์ด๋๊ฐ ๋์ด์ค ๊ฒ์ ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
A: ์๋์, ์ด ๋๊ตฌ๋ ์ค์ ์คํ ๋ก์ง๊ณผ ๊ด๋ จ๋ ํค์๋๋ง ์ถ์ถํ์ฌ ๊ณ์ฐํ๋ฏ๋ก ์ฃผ์์ ์ ์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
A: C-style ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ JavaScript, Java, Python, C++, PHP ๋ฑ ๋๋ถ๋ถ์ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ ์ ์ด๋ฌธ์ ์ธ์ํฉ๋๋ค.
A: ๋ถ๊ธฐ๋ ๋ฐ๋ณต์ด ์ ํ ์๋ ์ผ์ง์ ๊ตฌ์กฐ์ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฅ ๋จ์ํ๊ณ ์์ ํ ํํ์ ๋๋ค.