# [[Cyclomatic Complexity]] ## ๐Ÿ“Œ Brief Summary Cyclomatic Complexity(์ˆœํ™˜ ๋ณต์žก๋„)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ธก์ • ์ง€ํ‘œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [1]. ๋ฆฌํŒฉํ† ๋ง์˜ ๊ฒฐ๊ณผ์™€ ํ’ˆ์งˆ์„ ํ‰๊ฐ€ํ•˜๋Š” ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST) ๊ธฐ๋ฐ˜ ์ง€ํ‘œ๋กœ ํ™œ์šฉ๋˜๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„ ๋ถ„์„๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [2]. ์„ฑ๊ณต์ ์ธ ๊ตฌ์กฐ์  ๋ฆฌํŒฉํ† ๋ง์„ ๊ฑฐ์นœ ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋‹น ํ‰๊ท  ์ˆœํ™˜ ๋ณต์žก๋„ ์ˆ˜์น˜๊ฐ€ ๊ฐ์†Œํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜๋Š” ํŠน์ง•์„ ๋ณด์ž…๋‹ˆ๋‹ค [3, 4]. ## ๐Ÿ“– Core Content * **๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ ๋ณต์žก๋„ ๊ฐ์†Œ**: AI๋ฅผ ํ™œ์šฉํ•œ ๋ฆฌํŒฉํ† ๋ง ์‚ฌ๋ก€ ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด, ๋น„๋Œ€ํ•œ ๋ผ์šฐํŒ… ๋ ˆ์ด์–ด์˜ ๋กœ์ง์„ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋ณ„ ์ „์šฉ ๋ ˆ์ด์–ด๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์žฌ๋ถ„๋ฐฐํ•œ ๊ฒฐ๊ณผ ์ „์ฒด ํ•จ์ˆ˜์˜ ์ˆ˜๋Š” ๋Š˜์–ด๋‚ฌ์Œ์—๋„ ํ•จ์ˆ˜๋‹น ํ‰๊ท  ์ˆœํ™˜ ๋ณต์žก๋„๋Š” 2.24์—์„œ 2.13์œผ๋กœ ๋‚ฎ์•„์กŒ์œผ๋ฉฐ, ๋ผ์šฐํŒ… ๋ ˆ์ด์–ด ์ž์ฒด์˜ ํ‰๊ท  ๋ณต์žก๋„๋Š” 1.97๊นŒ์ง€ ํ•˜๋ฝํ–ˆ์Šต๋‹ˆ๋‹ค [3, 4]. * **์‹ค์ฆ์  ์—ฐ๊ตฌ์—์„œ์˜ ๊ฒ€์ฆ**: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ(Windows 7) ์ง„ํ™” ๊ธฐ๋ก ๋ถ„์„์—์„œ๋„, ๋ฆฌํŒฉํ† ๋ง์ด ์šฐ์„ ์ ์œผ๋กœ ์ง‘์ค‘๋œ ์ƒ์œ„ 5%์˜ ๋ชจ๋“ˆ์€ ๋‚˜๋จธ์ง€ 95%์˜ ์ผ๋ฐ˜ ๋ชจ๋“ˆ์— ๋น„ํ•ด ์ˆœํ™˜ ๋ณต์žก๋„(Cyclomatic complexity)๋ฅผ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ๋ณต์žก์„ฑ ์ง€ํ‘œ(Fan-in, Fan-out ๋“ฑ)๋ฅผ ๋” ํฐ ํญ์œผ๋กœ ๊ฐ์†Œ์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [5, 6]. * **ํ’ˆ์งˆ ์ธก์ •์˜ ๊ฐ๊ด€์  ์ฒ™๋„**: ์ˆœํ™˜ ๋ณต์žก๋„๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ์˜์กด์„ฑ ๋ถ„์„๊ณผ ๊ฐ™์€ AST ๊ธฐ๋ฐ˜ ๋ฉ”ํŠธ๋ฆญ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด, ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํžˆ ์žฌ๋ฐฐ์น˜๋œ ๊ฒƒ์„ ๋„˜์–ด ์‹ค์ œ์ ์ธ ๊ตฌ์กฐ์  ๊ฐœ์„ (์˜ˆ: ์‘์ง‘๋„ ๋†’์€ ์ž๊ธฐ ์™„๊ฒฐ์  ๋ชจ๋“ˆ๋กœ์˜ ์ „ํ™˜)์„ ์ด๋ฃจ์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋„๊ตฌ๋กœ ์“ฐ์ž…๋‹ˆ๋‹ค [2, 3]. * *(์ฐธ๊ณ : ์ œ๊ณต๋œ ์†Œ์Šค ๋‚ด์— ์ˆœํ™˜ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ •ํ™•ํ•œ ์ˆ˜ํ•™์  ๊ณต์‹์ด๋‚˜ ๊ตฌ์ฒด์ ์ธ ์ด๋ก ์  ์‚ฐ์ถœ ๊ธฐ์ค€์— ๋Œ€ํ•œ ๊ด€๋ จ ์ •๋ณด๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.)* ## โš–๏ธ Trade-offs & Caveats * **๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜(LOC) ์ฆ๊ฐ€**: ์ˆœํ™˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์‘์ง‘๋„ ๋†’์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ชจ๋“ˆ์ด๋‚˜ ํ•จ์ˆ˜๋กœ ๋…ผ๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ตœ์ ํ™”๋ฅผ ๊ฑฐ์น˜๋ฉด, ํ•„์—ฐ์ ์œผ๋กœ ์‹œ์Šคํ…œ ๋‚ด ์ „์ฒด ํ•จ์ˆ˜ ๋ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๋Š” ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: 806๊ฐœ์—์„œ 1,022๊ฐœ๋กœ ์ฆ๊ฐ€) [3]. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ณ„ ํ•จ์ˆ˜์˜ ๋ณต์žก๋„๋Š” ๊ฐ์†Œํ•˜์ง€๋งŒ ์ „์ฒด ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜(LOC)์™€ ํŒŒ์ผ ์ˆ˜๋Š” ์˜คํžˆ๋ ค ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€(Trade-off)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [7-9]. * **๋‹ค์ฐจ์›์ ์ธ ํ‰๊ฐ€์˜ ํ•„์š”์„ฑ**: ์ˆœํ™˜ ๋ณต์žก๋„์™€ ๊ฐ™์€ ์ง€ํ‘œ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜์ • ๋น„์šฉ์ด ๋ชจ๋“  ์ธก๋ฉด์—์„œ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง๋œ ๋ชจ๋“ˆ์€ ๋ณต์žก๋„ ์ˆ˜์น˜๊ฐ€ ๋‚ฎ์•„์ง€๋”๋ผ๋„, ๊ตฌ์กฐ์  ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์‹œ์Šคํ…œ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ง€๋Š” '๊ต์ฐจ ์ ˆ๋‹จ ๋ณ€๊ฒฝ(crosscutting changes)'์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ผ ์ง€ํ‘œ๊ฐ€ ์•„๋‹Œ ๋‹ค์ฐจ์›์ ์ธ ์˜ํ–ฅ ํ‰๊ฐ€๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆ˜๋ฐ˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [8, 9]. --- *Last updated: 2026-05-03*