C# 학습/C# 언어의 기초
C# 세미나 자료: 연산자 우선순위와 결합성 (Operator Precedence & Associativity)
DevGourmet
2025. 4. 8. 02:45
1. 개요
C#에서 여러 연산자가 함께 등장할 때는 **우선순위(Precedence)**와 **결합성(Associativity)**에 따라 연산 순서가 결정됩니다. 이는 코드의 정확성과 결과에 영향을 주기 때문에 반드시 이해해야 할 핵심 개념입니다.
본 세미나에서는 연산자의 우선순위 체계, 왼쪽/오른쪽 결합 연산자 구분, 그리고 전체 연산자 우선순위 일람표를 통해 연산자 실행 순서를 명확히 파악합니다.
2. 연산자 우선순위란?
- 여러 연산자가 있는 경우, 먼저 실행될 연산자를 결정하는 기준
int result = 2 + 3 * 4; // 곱셈이 먼저 수행됨 → 2 + (3 * 4) = 14
- 곱셈(*)은 덧셈(+)보다 높은 우선순위를 가짐
괄호로 명시적 우선순위 지정
int result = (2 + 3) * 4; // 결과: 20
3. 결합성(Associativity)이란?
- 우선순위가 같은 연산자가 여러 개 등장할 때의 연산 방향
3.1 왼쪽 결합 연산자 (Left-to-Right)
- 대부분의 이항 연산자 (+, -, *, /, %, &, |, ^, <, >, ==, !=, &&, ||, 등)
int result = 10 - 5 - 2; // (10 - 5) - 2 = 3
3.2 오른쪽 결합 연산자 (Right-to-Left)
- 단항 연산자, 할당 연산자(=, +=, ??=), 조건 연산자(?:) 등
int a;
int b;
a = b = 5; // b = 5 먼저 실행, 그 다음 a = 5
int x = true ? 1 : false ? 2 : 3; // 오른쪽부터 결합
4. 주요 연산자 우선순위 일람표 (상위 → 하위)
우선순위연산자결합성
1 | x.y, x[y], x(), new, typeof, checked, unchecked, default, nameof | 왼쪽 → 오른쪽 | ||
2 | ++, --, +, -, !, ~, (type), await (단항) | 오른쪽 → 왼쪽 | ||
3 | *, /, % | 왼쪽 → 오른쪽 | ||
4 | +, - | 왼쪽 → 오른쪽 | ||
5 | <<, >> | 왼쪽 → 오른쪽 | ||
6 | <, <=, >, >=, is, as | 왼쪽 → 오른쪽 | ||
7 | ==, != | 왼쪽 → 오른쪽 | ||
8 | & | 왼쪽 → 오른쪽 | ||
9 | ^ | 왼쪽 → 오른쪽 | ||
10 | ` | ` | 왼쪽 → 오른쪽 | |
11 | && | 왼쪽 → 오른쪽 | ||
12 | ` | ` | 왼쪽 → 오른쪽 | |
13 | ??, ?: | 오른쪽 → 왼쪽 | ||
14 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ` | =, ??=` | 오른쪽 → 왼쪽 |
괄호 ()를 사용하여 언제든 우선순위를 명시적으로 조절할 수 있습니다.
5. 결론
- 연산자 우선순위는 코드 해석과 연산 순서를 정확히 결정하는 기준입니다.
- 같은 우선순위 내에서는 결합성을 기준으로 순서를 결정합니다.
- =과 ?:는 오른쪽 결합 연산자임을 명확히 이해해야 예측 가능한 코드를 작성할 수 있습니다.
- 복잡한 수식에서는 괄호를 통해 명시적 순서를 지정하는 것이 가장 안전합니다.
6. Q&A
Q1. +와 -는 어느 쪽부터 계산되나요?
A1. 둘 다 이항 연산자이며, 왼쪽 결합이므로 왼쪽부터 순차적으로 계산됩니다.
Q2. 삼항 연산자(?:)도 오른쪽 결합인가요?
A2. 네, 조건 ? 값1 : 값2의 중첩 형태는 오른쪽부터 결합됩니다.
Q3. 연산 순서를 항상 괄호로 감싸야 하나요?
A3. 필수는 아니지만, 복잡하거나 가독성이 떨어질 경우 괄호로 명확히 해주는 것이 좋습니다.
Q4. a = b = c = 10;은 어떤 순서로 평가되나요?
A4. 오른쪽에서 왼쪽으로 결합되어 c = 10 → b = 10 → a = 10 순서로 실행됩니다.