느린 코드 vs 빠른 코드 — Big O 핵심
O(1), O(n), O(n²) — 데이터가 늘어날 때 코드가 얼마나 느려지는지 측정하는 척도.
AI가 만든 코드가 10건일 때는 잘 돌아가는데 10만 건이 되면 멈춘다면? Big O를 직감적으로 이해하면 Claude Code에게 '이거 너무 느린 방식 아니야?'라고 물어볼 수 있다.
Big O는 데이터 양이 늘어날 때 실행 시간이 얼마나 증가하는지를 나타내는 표기법입니다. 커피숍 비유로 설명하겠습니다. - O(1) — 손님이 몇 명이든 주문 접수는 1초. 데이터 양과 무관하게 항상 같은 시간. - O(n) — 손님 10명이면 10초, 100명이면 100초. 데이터에 비례해서 느려짐. - O(n²) — 손님 10명이면 100초, 100명이면 10,000초. 데이터가 늘면 폭발적으로 느려짐.
| Big O | 이름 | 데이터 1,000건 | 데이터 100만 건 | 비유 |
|---|---|---|---|---|
| O(1) | 상수 시간 | 1회 연산 | 1회 연산 | 사전에서 색인으로 바로 찾기 |
| O(n) | 선형 시간 | 1,000회 | 1,000,000회 | 책을 처음부터 한 장씩 넘기기 |
| O(n²) | 이차 시간 | 1,000,000회 | 1,000,000,000,000회 | 모든 사람이 모든 사람과 악수 |
같은 '찾기' 작업이라도 자료구조에 따라 O(1) vs O(n)으로 갈린다. 이중 반복문은 O(n²)의 위험 신호.
배열 검색 vs 해시맵 — 가장 중요한 실전 차이입니다. 리스트(배열)에서 값을 찾으면 처음부터 하나씩 확인해야 합니다 → O(n). 딕셔너리(해시맵)에서 키로 찾으면 바로 접근합니다 → O(1). 데이터가 100건일 때는 차이를 못 느끼지만, 100만 건이 되면 리스트는 100만 번 비교하고 해시맵은 1번에 끝납니다.
바이브코더가 성능을 신경써야 하는 이유 Claude Code가 이중 for문으로 코드를 짰다면, 데이터가 적을 때는 문제없지만 서비스가 성장하면 서버가 멈출 수 있습니다. 실전 팁: Claude Code에게 이렇게 물어보세요. - "이 코드의 시간복잡도가 어떻게 돼?" - "O(n²)인데 O(n)으로 줄일 수 있어?" - "이 부분에 해시맵을 쓰면 더 빨라지지 않을까?" Big O를 '정확하게 계산'할 필요는 없습니다. 느린 패턴을 알아보는 직감만 있으면 됩니다.
딕셔너리(해시맵)에서 키로 값을 조회하는 시간복잡도는?
이중 for문의 시간복잡도는 일반적으로 O(n)이다.