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 순서로 실행됩니다.