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