C/C++에서 '?' 연산자는 세 개의 피연산자를 필요로 하기 때문에 삼항 연산자(Ternary Operator)라고 부릅니다. "? :" 형태로 표현되며, 조건 연산자(Conditional Operator)라고도 알려져 있습니다. 이 연산자를 활용하면 if-else 문보다 간결하게 조건 분기를 표현할 수 있어 성능을 높이고 코드 줄 수를 줄이는 데 도움이 됩니다.
삼항 연산자의 기본 문법
Expression1 ? Expression2 : Expression3
세 개의 식(Expression)이 다음과 같은 방식으로 동작합니다.
- Expression1: 항상 먼저 평가되는 조건식입니다.
- Expression2: 조건식의 결과가 참(0이 아닌 값)일 때 실행됩니다.
- Expression3: 조건식의 결과가 거짓(0)일 때 실행됩니다.
예제 1: 삼항 연산자 기본 사용법
다음은 C 언어에서 삼항 연산자를 사용한 예제입니다.
#include <stdio.h>
int main() {
int a = -1;
double b = 26.4231;
int c = a ? printf("True value : %lf", b) : printf("False value : 0");
return 0;
}실행 결과
True value : 26.423100
변수 a의 값은 -1로 0이 아니므로 참으로 판단되어, 콜론(:) 앞에 있는 printf("True value : %lf", b)가 실행된 것을 확인할 수 있습니다.
동작 원리 상세 설명
Expression1은 항상 평가되며, Expression2와 Expression3은 Expression1의 평가 결과에 따라 선택적으로 실행됩니다. 즉, 조건식의 결과가 0이 아닌 값(음수 포함)이면 Expression2가, 0이면 Expression3이 실행됩니다.
또한 삼항 연산자는 반환 타입(return type)을 가집니다. 반환 타입은 Expression2에 의해 결정되며, Expression3이 Expression2의 타입으로 변환 가능한지 여부에도 영향을 받습니다. 만약 두 식의 타입이 서로 호환되지 않으면 컴파일러는 오류를 발생시킵니다.
예제 2: 조건 비교에 활용하기
다음은 두 변수를 비교하는 조건식에 삼항 연산자를 적용한 또 다른 예제입니다.
#include <stdio.h>
int main() {
int x = -1, y = 3;
double b = x + y + 0.5;
int c = x < y ? printf("True value : %lf", b) : printf("False value : 0");
return 0;
}실행 결과
True value : 2.500000
조건식 x < y는 -1 < 3이므로 참(true)이 되고, 따라서 변수 b의 값인 2.5가 출력됩니다. 이처럼 삼항 연산자를 사용하면 복잡한 if-else 구문 없이도 한 줄로 조건 분기를 깔끔하게 처리할 수 있습니다.