연산자(C# 프로그래밍 가이드)
C#에서 연산자는 식 또는 문에서 하나 이상의 피연산자에 적용되는 프로그램 요소입니다. 증가 연산자(++)나 new 같이 피연산자 하나를 사용하는 연산자를 단항 연산자라고 합니다. 산술 연산자(+, -, *, /) 같이 피연산자 두 개를 사용하는 연산자를 이항 연산자라고 합니다. 조건 연산자(?:)는 피연산자 세 개를 사용하며 이는 C#에서 유일한 삼진 연산자입니다.
다음 C# 문에는 단항 연산자 하나와 피연산자 하나가 들어 있습니다. 증가 연산자 ++는 피연산자 y의 값을 수정합니다.
y++;
다음 C# 문에는 이항 연산자가 두 개 있습니다. 각 연산자는 피연산자를 두 개씩 사용합니다. 할당 연산자 =에는 정수 변수 y와 식 2 + 3이 피연산자로 사용됩니다. 식 2 + 3 자체는 더하기 연산자와 두 개의 피연산자, 2 및 3으로 구성됩니다.
y = 2 + 3;
연산자, 평가, 및 연산자 우선 순위
피연산자는 유효한 식이거나 다른 연산으로 구성될 수 있는데 이때 식의 크기나 식의 수에는 제한이 없습니다. 여러 연산자를 포함하는 식에서 연산자가 적용되는 순서는 operator precedence, associativity 및 괄호로 결정됩니다.
각 연산자에는 정의된 우선 순위가 있습니다. 다른 우선 순위 수준을 가진 여러 연산자가 포함된 식에서 연산자의 우선 순위는 연산자가 평가되는 순서를 결정합니다. 예를 들어, 다음 문은 n1에 3을 할당합니다.
n1 = 11 - 2 * 4;
곱셈은 뺄셈보다 우선하기 때문에 곱하기가 가장 먼저 실행됩니다.
다음 표에서는 연산자를 각각 수행하는 연산의 종류에 따라 범주별로 구분하여 보여 줍니다. 이 범주는 우선 순위에 따라 나열되어 있습니다.
기본 연산자
식 |
설명 |
---|---|
x.y |
멤버 액세스 연산자 |
f(x) |
메서드 및 대리자 호출 |
a[x] |
배열 및 인덱서 액세스 |
x++ |
후위 증가 |
x-- |
후위 감소 |
new T(...) |
개체 및 대리자 생성 |
new T(...){...} |
이니셜라이저를 사용한 개체 생성. 개체 및 컬렉션 이니셜라이저(C# 프로그래밍 가이드)를 참조하십시오. |
new {...} |
익명 개체 이니셜라이저. 익명 형식(C# 프로그래밍 가이드)를 참조하십시오. |
new T[...] |
배열 생성. 배열(C# 프로그래밍 가이드)를 참조하십시오. |
typeof(T) |
T에 대한 System.Type 개체 가져오기 |
checked(x) |
checked 컨텍스트에서 식 계산 |
unchecked(x) |
unchecked 컨텍스트에서 식 계산 |
default (T) |
T 형식의 기본값 가져오기 |
delegate {} |
익명 함수(익명 메서드) |
단항 연산자
식 |
설명 |
---|---|
+x |
ID |
-x |
부정 연산 |
!x |
논리 부정 연산 |
~x |
비트 부정 연산 |
++x |
전위 증가 |
--x |
전위 감소 |
(T)x |
x를 형식 T 형식으로 명시적 변환 |
승제 연산자
식 |
설명 |
---|---|
곱하기 |
|
나누기 |
|
나머지 |
가감 연산자
식 |
설명 |
---|---|
x + y |
더하기, 문자열 연결, 대리자 결합 |
x - y |
빼기, 대리자 제거 |
시프트 연산자
식 |
설명 |
---|---|
x << y |
왼쪽 시프트 |
x >> y |
오른쪽 시프트 |
관계 및 형식 연산자
식 |
설명 |
---|---|
x < y |
보다 작음 |
x > y |
보다 큼 |
x <= y |
작거나 같음 |
x >= y |
크거나 같음 |
x is T |
x가 T이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
x as T |
T로 형식화된 x 또는 null(x를 T로 형식화할 수 없는 경우)을 반환합니다. |
같음 연산자
식 |
설명 |
---|---|
x == y |
같음 |
x != y |
같지 않음 |
논리, 조건 및 null 연산자
범주 |
식 |
설명 |
---|---|---|
논리곱 |
x & y |
정수 비트 AND, Boolean 논리곱 연산자 |
논리 XOR 연산자 |
x ^ y |
정수 비트 XOR, Boolean 논리 XOR 연산자 |
논리합 |
x | y |
정수 비트 OR, Boolean 논리합 연산자 |
조건부 논리곱 연산자 |
x && y |
x가 true인 경우에만 y를 계산합니다. |
조건부 논리합 연산자 |
x || y |
x가 false인 경우에만 y를 계산합니다. |
Null 결합 |
x ?? y |
x가 null인 경우 y로 계산하고, 그렇지 않으면 x로 계산합니다. |
조건 |
x ?: y : z |
x가 true이면 y로 계산되고 x가 false이면 z로 계산됩니다. |
할당 및 익명 연산자
식 |
설명 |
---|---|
할당 연산 |
|
x op= y |
복합 할당. 지원되는 연산자는 다음과 같습니다. +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
익명 함수(람다 식) |
결합성
우선 순위가 동일한 연산자 두 개 이상이 식 하나에 있으면 두 연산자의 결합성에 따라 연산 순서가 결정됩니다. 왼쪽 결합성이 있는 연산자는 왼쪽에서 오른쪽으로 계산됩니다. 예를 들어, x * y / z는 (x * y) / z와 같이 계산됩니다. 오른쪽 결합성이 있는 연산자는 오른쪽에서 왼쪽으로 계산됩니다. 예를 들어, 할당 연산자는 오른쪽 결합성이 있는 연산자입니다. 아닌 경우 다음 코드 오류가 발생합니다.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
오른쪽 결합성이 있는 연산자로는 할당 연산자와 삼진 연산자(?:)가 있습니다. 다른 모든 이항 연산자에는 왼쪽 결합성이 있습니다.
식에서 연산자가 왼쪽 결합성인지, 오른쪽 결합성인지에 따라 각 식의 피연산자가 먼저 평가됩니다. 다음 예제는 연산자와 피연산자의 계산 순서를 보여 줍니다.
명세 |
확인 순서 |
---|---|
a = b |
a, b, = |
a = b + c |
a, b, c, +, = |
a = b + c * d |
a, b, c, d, *, +, = |
a = b * c + d |
a, b, c, *, d, +, = |
a = b - c + d |
a, b, c, -, d, +, = |
a += b -= c |
a, b, c, -=, += |
괄호 추가
괄호를 사용하여 연산자 우선 순위와 연결을 통해 부과된 실행 순서를 변경할 수 있습니다. 예를 들어, 2 + 3 * 2는 일반적으로 승제 연산자가 가감 연산자보다 우선하기 때문에 8로 평가됩니다. 그러나 식을 (2 + 3) * 2처럼 작성하는 경우 곱셈 전에 덧셈이 계산되고 결과는 10입니다. 다음 예제는 괄호로 묶인 식의 계산 순서를 보여 줍니다. 이전 예제에서와 같이 피연산자는 연산자가 적용되기 전에 평가됩니다.
명세 |
확인 순서 |
---|---|
a = (b + c) * d |
a, b, c, +, d, *, = |
a = b - (c + d) |
a, b, c, d, +, -, = |
a = (b + c) * (d - e) |
a, b, c, +, d, e, -, *, = |
연산자 오버로드
사용자 지정 클래스 및 구조체에서 연산자의 동작을 변경할 수 있습니다. 이러한 과정을 연산자 오버로드라고 합니다. 자세한 내용은 오버로드할 수 있는 연산자(C# 프로그래밍 가이드)을 참조하십시오.
관련 단원
자세한 내용은 연산자 키워드(C# 참조) 및 C# 연산자을 참조하십시오.