# Cyclomatic complexity > 순환복잡도 또는 CC(cyclomatic complexity)는 프로그램의 복잡도를 계산하는 지표로, 코드의 실행 경로(linearly independent paths)가 몇 개인지를 정량화한다. 가장 낮은 점수는 1점(분기가 하나도 없으면 경로가 1개이므로). Thomas J. McCabe가 1976년에 제안했다.[^1] 순환복잡도 또는 CC(cyclomatic complexity)는 프로그램의 복잡도를 계산하는 지표로, 코드의 실행 경로(linearly independent paths)가 몇 개인지를 정량화한다. 가장 낮은 점수는 1점(분기가 하나도 없으면 경로가 1개이므로). 가 <1976년>에 제안했다.[^1] 순환복잡도가 낮으면 적은 수의 [단위 테스트](https://wiki.g15e.com/pages/Unit%20test.txt)로도 테스트 커버리지(정확히는 [분기 커버리지](https://wiki.g15e.com/pages/Branch%20coverage.txt))를 높일 수 있게 된다. ## CC를 낮추는 방법들 - : 분기 대신 룩업 테이블 또는 사전을 쓰면 CC를 줄일 수 있다. 언어에서 지원하는 경우 패턴 매칭을 쓰면 좋겠으나 패턴 매칭을 쓴다고 CC가 낮아지지는 않는다. - [Conditionals to polymorphism](https://wiki.g15e.com/pages/Conditionals%20to%20polymorphism.txt): 분기 대신 <다형성>을 쓰면 CC를 줄일 수 있다. 다만 이렇게 하는 게 언제나 코드의 이해가능성 내지 유지보수성 향상을 보장하지는 않는다. ## CC와 이른 리턴(early return) 일반적인 오해와 달리 함수 앞부분에서 [Guard clauses](https://wiki.g15e.com/pages/Guard%20clauses.txt)를 써도 CC에 영향을 주지는 않는다. CC는 [인지복잡도](https://wiki.g15e.com/pages/Cognitive%20complexity.txt)와 달리 중첩된 분기에 대해 가중치를 부여하지 않기 때문이다. ## 대안 순환복잡도가 테스트가능성(testability)을 측정하기엔 좋지만 유지보수성(maintainability)을 측정하기엔 부족한 면이 있어서 이를 보완하기 위해 [인지복잡도](https://wiki.g15e.com/pages/Cognitive%20complexity.txt)도라는 지표가 제안된 바 있다. ## Footnotes [^1]: [A complexity measure](https://wiki.g15e.com/pages/A%20complexity%20measure.txt)