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

C/C++ 삼항 연산자(?:)와 if…else 문의 차이점 완벽 정리

삼항 연산자(ternary operator)는 조건 연산자(conditional operator)라고도 불립니다. 이 연산자를 사용하면 특정 조건을 검사하고, 그 결과에 따라 다른 작업을 수행할 수 있습니다. 물론 삼항 연산자를 사용하지 않고 if-else 문으로도 동일한 기능을 구현할 수 있습니다.

대부분의 경우 삼항 연산자와 if-else 문은 같은 결과를 만들어냅니다. 하지만 일부 상황에서는 if-else 문을 사용할 수 없고, 반드시 삼항 연산자를 사용해야 하는 경우가 존재합니다. 대표적인 예가 바로 상수 변수(constant variable)에 값을 할당하는 경우입니다. 상수 변수는 선언과 동시에 초기화되어야 하기 때문에, if-else 문처럼 여러 문장으로 나뉘는 구조에서는 값을 할당할 수 없습니다. 반면 삼항 연산자는 단일 표현식(expression)이므로 선언과 초기화를 한 줄에서 처리할 수 있습니다.

if-else 사용 시 컴파일 오류 예제

먼저 if-else 문으로 상수 변수에 값을 할당하려는 경우를 살펴보겠습니다.

#include<iostream>
using namespace std;
main() {
    int a = 10, b = 20;
    const int x;
    if(a < b) {
        x = a;
    } else {
        x = b;
    }
    cout << x;
}

실행 결과

컴파일 에러 발생!
상수 변수 x는 선언과 동시에 초기화되어야 하며,
별도의 문장에서 값을 할당하는 것은 허용되지 않습니다.

위 코드는 상수 변수 x를 먼저 선언한 뒤, 이후 별도의 문장에서 값을 할당하려고 하기 때문에 컴파일되지 않습니다. C++에서 const 변수는 반드시 생성 시점에 초기화해야 합니다.

삼항 연산자를 사용한 해결 방법

같은 로직을 삼항 연산자로 작성하면 문제없이 컴파일됩니다.

#include<iostream>
using namespace std;
main() {
    int a = 10, b = 20;
    const int x = (a < b) ? a : b;
    cout << x;
}

실행 결과

10

삼항 연산자는 (조건식) ? 값1 : 값2 형태의 단일 표현식이므로, 변수 선문과 동시에 초기화하는 것이 가능합니다. 조건 a < b가 참이므로 x에는 a의 값인 10이 할당됩니다.

정리

  • 삼항 연산자와 if-else 문은 대부분의 경우 동일한 기능을 수행합니다.
  • 하지만 상수 변수 초기화처럼 선언과 할당이 분리될 수 없는 상황에서는 반드시 삼항 연산자를 사용해야 합니다.
  • 삼항 연산자는 표현식이므로 다른 표현식 내부에서도 사용할 수 있어 유연성이 높습니다.