티스토리 뷰
개요
최신 컴파일러는 최신 하드웨어에서 효율적으로 실행되도록 코드를 최적화하는 환상적인 작업을 수행한다. 코드가 단순하고 예측 가능할 때 최적화 기능이 뛰어나며 코드가 복잡할수록 컴파일러의 최적화 기능을 통해 얻을 수 있는 도움은 줄어든다. 대다수 컴파일러 최적화 도구는 코드 블록의 순환 복잡도cyclomatic complexity가 임겟값을 초과하면 최적화 시도를 포기한다.
모던 소프트웨어 엔지니어링 p203
책을 읽다가 위 문장이 인상적이라 순혼 복잡도를 정리해본다. 코드가 단순하고 가독성이 좋은 것도 알고, 컴파일러의 최적화 기능도 알고 있었는데 이 둘이 이렇게 연결될 수 있다는 생각을 못했다. 위 문장을 다음과 같이 해석해본다.
개발자가 아둥바둥 코드를 최적화하여 성능을 개선하려다 코드가 복잡해지고 가독성까지 해칠바에야, 코드를 가독성좋고 단순하게 짠 다음에 최적화는 컴파일러에게 맡기는 것이 낫다.
순환복잡도란?
순환복잡도cyclomatic complexity는 프로그램의 복잡도를 수치로 나타낸 것이며 코드 안에 있는 독립적인 경로의 수를 의미한다. 풀어쓰면 “이 코드에는 테스트해야 할 서로 다른 흐름이 몇 개나 있는가?” 하는 것이다.
계산 공식
M = E - N + 2P
- M = 순환 복잡도
- E = 간선(Flow Chart 상에서의 화살표, 흐름)
- N = 노드(Flow Chart 상의 박스, 실행 단위)
- P = 독립적인 부분(보통 하나의 함수면 1)
또 다른 공식
간단히, 조건문(if, while, for, case 등)의 개수 + 1 로도 대략 계산할 수 있다.
예시:
func example(x int) int {
if x > 0 {
return 1
} else if x == 0 {
return 0
} else {
return -1
}
}
- if, else if 조건문 2개이기에 순환 복잡도는 2 + 1 = 3
- 따라서 테스트 케이스가 최소 3개 필요하다 (x > 0, x == 0, x < 0)
순환 복잡도가 중요한 이유
- 순환 복잡도가 높으면 코드가 복잡하다는 말이고 버그 발생 확률이 증가한다.
- 10을 넘으면 “리팩터링을 고려하라”고 권장하는 경우가 많다
- 코드 리뷰나 커버리지 분석할 때 기준으로 삼기도 한다.
반응형
'development' 카테고리의 다른 글
TIL: 본질적인 복잡성과 우발적인 복잡성 (0) | 2025.04.27 |
---|---|
데이터베이스 인터널스 - Belady’s Anomaly (0) | 2025.04.19 |
YouTub 좋아요를 누르면 TickTick에 추가하기 (0) | 2025.04.09 |
위임의 기술과 AI 에이전트의 활용 (0) | 2025.03.15 |
코딩 업무를 잘하는 법 - 유튜브 내용 정리 (0) | 2025.02.04 |
반응형

최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 오블완
- Gin
- 영화
- 인텔리제이
- API
- backend
- bun
- 엉클 밥
- postgres
- 독서
- 클린 아키텍처
- Echo
- middleware
- clean agile
- gocore
- 잡학툰
- solid
- notion
- Bug
- golang
- go
- agile
- strange
- 독서후기
- ChatGPT
- 티스토리챌린지
- websocket
- OpenAI
- intellij
- 클린 애자일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함