세 개의 피연산자를 필요로 하는 연산자를 삼항 연산자(Ternary Operator)라고 하며, "? :" 기호로 표현합니다. 삼항 연산자는 조건 연산자(Conditional Operator)라고도 불리며, 프로그램의 성능을 향상시키고 코드의 줄 수를 줄여주는 장점이 있습니다.
삼항 연산자의 문법
C 언어에서 삼항 연산자의 기본 문법은 다음과 같습니다.
Expression1 ? Expression2 : Expression3
세 표현식의 역할은 다음과 같습니다.
Expression1: 조건을 판단하는 표현식으로, 항상 먼저 평가됩니다.
Expression2: 조건이 참일 때 실행되는 표현식입니다.
Expression3: 조건이 거짓일 때 실행되는 표현식입니다.
예제 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
동작 원리
Expression1은 항상 먼저 평가되며, Expression2와 Expression3은 Expression1의 결과에 따라 선택적으로 실행됩니다. Expression1의 결과가 0이 아니거나 음수이면 Expression2가 실행되고, 그렇지 않으면 Expression3이 실행됩니다.
위 예제에서 변수 a의 값은 -1이므로 참으로 판단되어, printf 함수를 통해 b의 값인 26.423100이 출력된 것입니다.
반환 타입의 규칙
삼항 연산자는 반환 타입을 가집니다. 반환 타입은 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)이므로 Expression2가 실행되어, x + y + 0.5의 계산 결과인 2.500000이 출력됩니다.
정리
삼항 연산자는 간단한 if-else 문을 한 줄로 대체할 수 있어 코드를 간결하게 만들어 줍니다. 다만 복잡한 중첩 구조에서는 가독성이 떨어질 수 있으므로, 단순한 조건 분기에 적절히 활용하는 것이 좋습니다.