๐Ÿงฉ์ฝ”๋“œ ๋ณต์žก๋„ ์ธก์ •๊ธฐ

๋ถ„์„ํ•  ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ๊ฐ์ง€ํ•˜์—ฌ ๋ณต์žก๋„ ์ ์ˆ˜์™€ ์œ ์ง€๋ณด์ˆ˜ ๋“ฑ๊ธ‰์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋ณต์žก๋„ ์ ์ˆ˜ (CC)

1์ 
์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
๊ฐ์ง€๋œ ํ•ญ๋ชฉ๊ฐœ์ˆ˜
์กฐ๊ฑด๋ฌธ (if, case, &&, ||)0
๋ฐ˜๋ณต๋ฌธ (for, while, map)0
์œ ์ง€๋ณด์ˆ˜ ๋“ฑ๊ธ‰-

์ข‹์€ ์ฝ”๋“œ๋Š” '๋‹จ์ˆœํ•จ'์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค

์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ '๋ณต์žก๋„'๋Š” ๋ฒ„๊ทธ์˜ ์˜จ์ƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ† ๋งˆ์Šค ๋งฅ์ผ€์ด๋ธŒ(Thomas J. McCabe)๊ฐ€ ์ œ์•ˆํ•œ **์ˆœํ™˜ ๋ณต์žก๋„(Cyclomatic Complexity)**๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ์ ์ธ ํ๋ฆ„์ด ์–ผ๋งˆ๋‚˜ ๊ผฌ์—ฌ ์žˆ๋Š”์ง€๋ฅผ ์ •๋Ÿ‰์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์— ๋„ˆ๋ฌด ๋งŽ์€ `if`, `else`, `switch`๋ฌธ์ด ์ค‘์ฒฉ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ๋ฃจํ”„๊ฐ€ ์–ฝํ˜€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์ฝ”๋“œ๋Š” ์ฝ๊ธฐ ํž˜๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜์ •์„ ๊ฐ€ํ–ˆ์„ ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(Side Effect)๋ฅผ ์ผ์œผํ‚ฌ ํ™•๋ฅ ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค.

๋ณธ ๋„๊ตฌ๋Š” ์ž…๋ ฅ๋œ ์ฝ”๋“œ ๋‚ด์—์„œ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ๋‚˜๋ˆ„๋Š” ์ฃผ์š” ํ‚ค์›Œ๋“œ๋“ค์„ ๋ถ„์„ํ•˜์—ฌ ๋ณต์žก๋„ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์ˆ˜๊ฐ€ 1~10 ์‚ฌ์ด๋ผ๋ฉด ๋งค์šฐ ์ž˜ ๊ตฌ์กฐํ™”๋œ ์ฝ”๋“œ์ด๋ฉฐ, 11~20 ์‚ฌ์ด๋ผ๋ฉด ๋ณต์žกํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ ์ˆ˜๊ฐ€ 20์„ ์ดˆ๊ณผํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ์ง€๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํฐ ํ•จ์ˆ˜๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๋Š” 'ํ•จ์ˆ˜ ์ถ”์ถœ(Extract Method)' ๋ฆฌํŒฉํ† ๋ง์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

๋‚ฎ์€ ๋ณต์žก๋„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์˜ˆ์˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์ด ์‰ฌ์›Œ์ง€๋ฉฐ, ์ƒˆ๋กœ์šด ํŒ€์›์ด ํ”„๋กœ์ ํŠธ์— ํ•ฉ๋ฅ˜ํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋ฐ”๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ์ž‘์„ฑํ•œ ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์–ด ๋ณด์„ธ์š”. ์ˆซ์ž๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ณต์žก๋„ ์ ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋” ํด๋ฆฐํ•˜๊ณ  ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ€์ด๋“œ๊ฐ€ ๋˜์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

Q: ์ฃผ์„๋„ ๋ณต์žก๋„ ์ ์ˆ˜์— ํฌํ•จ๋˜๋‚˜์š”?

A: ์•„๋‹ˆ์š”, ์ด ๋„๊ตฌ๋Š” ์‹ค์ œ ์‹คํ–‰ ๋กœ์ง๊ณผ ๊ด€๋ จ๋œ ํ‚ค์›Œ๋“œ๋งŒ ์ถ”์ถœํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์ฃผ์„์€ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Q: ์–ด๋–ค ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋‚˜์š”?

A: C-style ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” JavaScript, Java, Python, C++, PHP ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ด๋Š” ์ œ์–ด๋ฌธ์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

Q: ๋ณต์žก๋„ 1์ ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜์š”?

A: ๋ถ„๊ธฐ๋‚˜ ๋ฐ˜๋ณต์ด ์ „ํ˜€ ์—†๋Š” ์ผ์ง์„  ๊ตฌ์กฐ์˜ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์•ˆ์ „ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.