C++ 연산자 우선순위란?
연산자 우선순위(operator precedence)는 표현식에서 항(term)들이 어떻게 묶여 평가되는지를 결정하는 규칙입니다. 또한 결합 방향(associativity)은 괄호가 없을 때 우선순위가 같은 연산자들을 어느 방향부터 묶어 계산할지 정하는 속성으로, 표현식의 최종 결과값에 직접적인 영향을 미칩니다.
모든 연산자가 동일한 우선순위를 갖는 것은 아닙니다. 예를 들어 곱셈 연산자(*)는 덧셈 연산자(+)보다 더 높은 우선순위를 가집니다.
예제로 이해하기
x = 7 + 3 * 2;라는 코드가 있다고 가정해 보겠습니다. 이때 x에는 20이 아니라 13이 대입됩니다. 그 이유는 * 연산자가 + 연산자보다 우선순위가 높기 때문에 먼저 3 * 2 = 6을 계산한 뒤, 7 + 6 = 13을 수행하기 때문입니다.
C++ 연산자 우선순위 표
아래 표에서는 우선순위가 가장 높은 연산자가 맨 위에, 가장 낮은 연산자가 맨 아래에 배치되어 있습니다. 따라서 하나의 표현식 안에서는 우선순위가 높은 연산자일수록 먼저 평가됩니다.
| 구분 | 연산자 | 결합 방향 |
|---|---|---|
| 후위(Postfix) | () [] -> . ++ -- | 왼쪽 → 오른쪽 |
| 단항(Unary) | + - ! ~ ++ -- (type) * & sizeof | 오른쪽 → 왼쪽 |
| 곱셈(Multiplicative) | * / % | 왼쪽 → 오른쪽 |
| 덧셈(Additive) | + - | 왼쪽 → 오른쪽 |
| 시프트(Shift) | << >> | 왼쪽 → 오른쪽 |
| 관계(Relational) | < <= > >= | 왼쪽 → 오른쪽 |
| 동등(Equality) | == != | 왼쪽 → 오른쪽 |
| 비트 AND | & | 왼쪽 → 오른쪽 |
| 비트 XOR | ^ | 왼쪽 → 오른쪽 |
| 비트 OR | | | 왼쪽 → 오른쪽 |
| 논리 AND | && | 왼쪽 → 오른쪽 |
| 논리 OR | || | 왼쪽 → 오른쪽 |
| 조건(Conditional) | ?: | 오른쪽 → 왼쪽 |
| 대입(Assignment) | = += -= *= /= %= >>= <<= &= ^= |= | 오른쪽 → 왼쪽 |
| 쉼표(Comma) | , | 왼쪽 → 오른쪽 |
실무 팁: 괄호를 활용하세요
연산자 우선순위를 모두 외우지 않더라도 괄호()를 사용하면 의도한 계산 순서를 명확하게 지정할 수 있습니다. 복잡한 표현식에서는 괄호를 적극적으로 활용하는 것이 코드의 가독성과 유지보수성을 높이는 좋은 습관입니다.