C# 연산자 우선순위와 결합성 마스터하기: 실전 가이드
C# 연산자 우선순위와 결합성 마스터하기
이 심층 튜토리얼에서는 C# 컴파일러가 연산자 우선순위와 결합성 규칙을 적용하여 식을 평가하는 방식을 설명합니다. 명확한 예제와 참조 표를 통해 학습하세요.
C#의 연산자 우선순위
연산자 우선순위는 식의 각 부분이 평가되는 순서를 정의합니다. 각 C# 연산자는 고정된 우선순위 레벨을 가지므로 컴파일러는 표현식을 일관되게 처리합니다.
예를 들어, 곱셈 연산자 *는 덧셈 +보다 우선순위가 높습니다. 따라서
int x = 4 + 3 * 5;
식에서 곱셈이 먼저 수행되어
x = 19가 됩니다.
만약 덧셈이 곱셈보다 우선한다면 결과는 35가 되겠지만, C#은 확립된 우선순위 계층을 따릅니다.
연산자 우선순위 표
아래 표는 연산자를 높은 우선순위에서 낮은 순서로 나열합니다.
C# 연산자 우선순위
| 범주 | 연산자 |
| 후위 증가/감소 | ++, --
| 전위 증가/감소 및 단항 | ++, --, +, -, !, ~
| 승법적 | *, /, %
| 가법적 | +, -
| 시프트 | <<, >>
| 관계형 | <, <=, >, >=
| 동등성 | ==, !=
| 비트 AND | &
| 비트 XOR | ^
| 비트 OR | |
| 논리 AND | &&
| 논리 OR | ||
| 삼항 | ? :
| 대입 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
대입 연산자는 가장 낮은 우선순위를 가지며, 후위 증가/감소가 최상위에 위치합니다.
예제 1: 연산자 우선순위
using System;
namespace OperatorDemo {
class OperatorPrecedence {
public static void Main(string[] args) {
int result1;
int a = 5, b = 6, c = 4;
result1 = --a * b - ++c;
Console.WriteLine(result1);
bool result2;
result2 = b >= c + a;
Console.WriteLine(result2);
}
}
}
실행 결과:
19 False
평가 단계:
(--a) → 4 (a는 4가 됨)
(++c) → 5 (c는 5가 됨)
(a * b) → 24
- 뺄셈: 24 - 5 = 19
두 번째 식에서 덧셈 +가 비교 >=보다 우선하므로 c + a가 먼저 평가됩니다.
C# 연산자의 결합성
두 연산자가 같은 우선순위를 가질 때, 컴파일러는 결합성을 사용해 평가 순서를 결정합니다. 대부분의 C# 연산자는 왼쪽에서 오른쪽(Left-to-Right)으로 결합하지만, 일부는 오른쪽에서 왼쪽(Right-to-Left)으로 결합합니다.
예시:
int a = 5, b = 6, c = 3;
int result = a * b / c;
*와 /는 왼쪽에서 오른쪽으로 결합하므로 곱셈이 먼저 수행되어 10이 됩니다.
오른쪽에서 왼쪽 결합성은 대입 연산 체인에서 중요합니다:
int a = 5, b = 6, c = 3;
a = b = c;
값 3이 b에 대입되고, 다시 b가 a에 대입되어 모든 변수가 3을 갖게 됩니다.
C# 연산자 결합성 요약
C# 연산자 결합성
| 범주 | 연산자 | 결합성 |
| 후위 증가/감소 | ++, -- | 왼쪽 → 오른쪽 |
| 전위 증가/감소 및 단항 | ++, --, +, -, !, ~ | 오른쪽 → 왼쪽 |
| 승법적 | *, /, % | 왼쪽 → 오른쪽 |
| 가법적 | +, - | 왼쪽 → 오른쪽 |
| 시프트 | <<, >> | 왼쪽 → 오른쪽 |
| 관계형 | <, <=, >, >= | 왼쪽 → 오른쪽 |
| 동등성 | ==, != | 왼쪽 → 오른쪽 |
| 비트 AND | & | 왼쪽 → 오른쪽 |
| 비트 XOR | ^ | 왼쪽 → 오른쪽 |
| 비트 OR | | | 왼쪽 → 오른쪽 |
| 논리 AND | && | 왼쪽 → 오른쪽 |
| 논리 OR | || | 왼쪽 → 오른쪽 |
| 삼항 | ? : | 오른쪽 → 왼쪽 |
| 대입 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= | 오른쪽 → 왼쪽 |
주요 오른쪽→왼쪽 연산자로는 전위 단항 연산자, 삼항 연산자, 모든 대입 연산자가 있습니다.
예제 2: 결합성 실전
using System;
namespace OperatorDemo {
class OperatorAssociativity {
public static void Main(string[] args) {
int a = 5, b = 6, c = 3;
int result = a * b / c;
Console.WriteLine(result);
a = b = c;
Console.WriteLine($"a = {a}, b = {b}, c = {c}");
}
}
}
출력:
10
a = 3, b = 3, c = 3