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

C#에서 || 연산자와 | 연산자의 차이점 완벽 정리

C#에는 두 가지 OR 연산자가 있습니다. ||논리 OR(Logical OR) 연산자이고, |비트별 논리 OR(Bitwise Logical OR) 연산자입니다. 두 연산자는 문법상 거의 동일해 보이지만, 실제 실행 방식에서 중요한 차이가 있습니다.

기본 문법

  • bool_exp1 || bool_exp2
  • bool_exp1 | bool_exp2

두 구문은 형태가 비슷하지만, 내부적으로 처리되는 방식은 완전히 다릅니다.

|| 연산자 (논리 OR)의 동작 방식

  • 먼저 bool_exp1을 실행하고, 그 결과에 따라 두 번째 표현식의 실행 여부가 결정됩니다.
  • bool_exp1이 true라면 OR 연산의 결과는 무조건 true이므로, bool_exp2를 실행할 필요가 없습니다.
  • 따라서 bool_exp2는 오직 bool_exp1이 false를 반환한 경우에만 실행됩니다.
  • 이러한 동작 방식 때문에 ||는 단락 평가(Short-Circuit) 연산자라고도 불립니다. 첫 번째 표현식의 결과에 따라 나머지 연산을 '건너뛰기' 때문입니다.

| 연산자 (비트별 논리 OR)의 동작 방식

  • | 연산자의 경우 컴파일러는 두 표현식을 모두 실행합니다. 즉, 한쪽의 결과와 관계없이 양쪽 모두 평가됩니다.
  • 첫 번째 표현식이 이미 true라면 두 번째 표현식을 실행하는 것은 불필요하지만, | 연산자는 이를 건너뛰지 않습니다.
  • OR 연산의 결과가 false가 되려면 두 표현식이 모두 false여야 하므로, 첫 번째 결과가 true일 때까지 두 번째 표현식을 실행하는 것은 비효율적입니다.

|| 연산자 예제

using System;
namespace DemoApplication{
    public class Program{
        static void Main(string[] args){
            if(Condition1() || Condition2()){
                Console.WriteLine("Logical OR If Condition Executed");
            }
            Console.ReadLine();
        }
        static bool Condition1(){
            Console.WriteLine("Condition 1 executed");
            return true;
        }
        static bool Condition2(){
            Console.WriteLine("Condition 2 executed");
            return true;
        }
    }
}

실행 결과

Condition 1 executed
Logical OR If Condition Executed

위 출력을 보면 Condition1()이 true를 반환했기 때문에 Condition2()는 아예 실행되지 않았습니다. 이것이 바로 단락 평가의 핵심입니다.

| 연산자 예제

using System;
namespace DemoApplication{
    public class Program{
        static void Main(string[] args){
            if(Condition1() | Condition2()){
                Console.WriteLine("Logical OR If Condition Executed");
            }
            Console.ReadLine();
        }
        static bool Condition1(){
            Console.WriteLine("Condition 1 executed");
            return true;
        }
        static bool Condition2(){
            Console.WriteLine("Condition 2 executed");
            return true;
        }
    }
}

실행 결과

Condition 1 executed
Condition 2 executed
Logical OR If Condition Executed

| 연산자를 사용하면 Condition1()이 이미 true를 반환했음에도 Condition2()까지 모두 실행된 것을 확인할 수 있습니다.

정리

  • || (논리 OR): 단락 평가를 수행하여 첫 번째 조건이 true면 두 번째 조건을 평가하지 않습니다. 성능 면에서 유리하며, 일반적인 조건문에서 권장됩니다.
  • | (비트별 논리 OR): 두 조건을 항상 모두 평가합니다. 비트 연산 목적이거나, 두 메서드가 반드시 모두 실행되어야 하는 특수한 경우에 사용합니다.