Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 연산자 우선순위란? 개념부터 예제까지 쉽게 이해하기

연산자(Operator)는 컴파일러에게 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 기호입니다. 예를 들어 +, -, *, / 같은 기호들이 모두 연산자에 해당합니다.

연산자 우선순위(Operator Precedence)란?

연산자 우선순위는 하나의 식(expression)에서 여러 연산자가 함께 사용될 때 어떤 연산을 먼저 수행할지 결정하는 규칙입니다. 우선순위에 따라 항들이 묶이는 방식이 달라지며, 이는 곧 식의 최종 평가 결과에 직접적인 영향을 미칩니다.

모든 연산자의 우선순위가 동일한 것은 아닙니다. 대표적인 예로, 곱셈 연산자(*)는 덧셈 연산자(+)보다 높은 우선순위를 가집니다. 따라서 a + b * c라는 식은 (a + b) * c가 아니라 a + (b * c)로 해석됩니다.

C# 주요 연산자 우선순위 순서

  • 1순위: 괄호 () — 가장 먼저 계산됨
  • 2순위: 단항 연산자 ++, --, !, ~
  • 3순위: 곱셈/나눗셈/나머지 *, /, %
  • 4순위: 덧셈/뺄셈 +, -
  • 5순위: 시프트 연산자 <<, >>
  • 6순위: 관계 연산자 <, >, <=, >=
  • 7순위: 등호 연산자 ==, !=
  • 8순위: 논리 AND &&
  • 9순위: 논리 OR ||
  • 10순위: 대입 연산자 =, +=, -= 등 — 가장 마지막에 처리됨

연산자 우선순위 예제 코드

다음은 C#에서 연산자 우선순위가 실제로 어떻게 작동하는지 보여주는 예제입니다.

using System;

namespace OperatorsAppl {
    class Program {
        static void Main(string[] args) {
            int a = 20;
            int b = 10;
            int c = 15;
            int d = 5;
            int e;

            e = (a + b) * c / d;      // (30 * 15) / 5 = 90
            Console.WriteLine("Value of (a + b) * c / d is : {0}", e);

            e = ((a + b) * c) / d;    // (30 * 15) / 5 = 90
            Console.WriteLine("Value of ((a + b) * c) / d is : {0}", e);

            e = (a + b) * (c / d);    // (30) * (15 / 5) = 90
            Console.WriteLine("Value of (a + b) * (c / d) is : {0}", e);

            e = a + (b * c) / d;      // 20 + (150 / 5) = 50
            Console.WriteLine("Value of a + (b * c) / d is : {0}", e);

            Console.ReadLine();
        }
    }
}

실행 결과

Value of (a + b) * c / d is : 90
Value of ((a + b) * c) / d is : 90
Value of (a + b) * (c / d) is : 90
Value of a + (b * c) / d is : 50

예제 분석

첫 번째와 두 번째 식은 결과가 동일하게 90입니다. (a + b)가 괄호로 묶여 있어 덧셈이 먼저 계산되고, 이후 곱셈과 나눗셈이 왼쪽에서 오른쪽 순서(결합 법칙)로 진행되기 때문입니다.

네 번째 식 a + (b * c) / d를 살펴보면, 곱셈 b * c = 150이 먼저 수행되고, 그 다음 나눗셈 150 / 5 = 30, 마지막으로 덧셈 20 + 30 = 50이 계산됩니다. 만약 괄호가 없었다면 우선순위 규칙에 따라 같은 순서로 해석되지만, 괄호를 명시적으로 사용하면 코드의 의도가 훨씬 명확해집니다.

정리

연산자 우선순위를 정확히 이해하면 복잡한 수식도 오류 없이 작성할 수 있습니다. 다만 우선순위에만 의존하기보다는, 괄호를 적극적으로 활용하여 계산 순서를 명확히 표현하는 것이 가독성과 유지보수 측면에서 훨씬 좋은 코딩 습관입니다.