본문 바로가기
개발/C, C++

[C/C++] 삼항 조건 연산자(삼항 연산자)

by 77monkey 개발자 2023. 9. 13.
반응형

삼항 조건 연산자는 if else 구문을 한 줄로 표현할 때 사용합니다. 모든 if else 구문을 삼항 조건 연산자로 표현할 수 있는 것은 아니지만, 간결한 if else 구문일 경우에 삼항 연산자로 바꿔 쓸 수 있습니다. 

 

삼항 조건 연산자

삼항 연산자라고도 불리우는 삼항 조건 연산자는 아래와 같이 표현됩니다. 

condition ? expression if true : expression if false;

condition이 참 또는 거짓으로 판단이 되면 참일 경우에는 expression if true가 실행이 되고 거짓일 경우 expression if false가 실행이 됩니다.  여기서 주의할 점은 expression if true와 expression if false가 같은 타입이어야 합니다. 예를 들면 expression if true가 문자열이면 expression if false도 문자열이어야 합니다. 만약에 expression if true가 숫자인데 expression if false가 문자열일 수는 없습니다. 

삼항 조건 연산자를 if문으로 표현하면 아래와 같습니다.

if (condition) {
	expression if true;
} else {
	expression if false;
}

5줄로 표현되는 if else 문이 삼항 조건 연산자를 사용하면 1 줄로 표현이 가능합니다. 엄청 편리하죠?

 

삼항 조건 연산자 예시

#include <stdio.h>

int main() {
	int a = 2;
	int b = 0;

	a > 0 ? b = 1 : b = -1;

	printf("b = %d\n", b);

	return 0;
}

코드르 보시면 이해하시겠지만, 위 코드처럼 표현식이 올 수 있습니다. a가 양수이기 때문에 b는 1로 설정되고 출력은 b = 1이 됩니다. 

#include <stdio.h>

int main() {
	int a = 2;
	int b = a > 0 ? 1 : -1;

	printf("b = %d\n", b);

	return 0;
}

첫 번째 예시와 두 번째 예시는 같은 결과를 출력합니다. 다양하게 표현할 수 있다는 점을 알려드리기 위해서 작성해 보았습니다. 

#include <stdio.h>

int main() {
	int var = 2;

	printf("var is %s\n", var % 2 == 0 ? "even" : "odd");

	return 0;
}

이렇게 printf문에도 사용할 수도 있습니다. 결과는 예상하신 것처럼 var is even이 출력됩니다.

 

중첩 삼항 조건 연산자

그럼 중첩해서 사용할 수 있는지 여부가 궁금하실 텐데 중첩해서 사용하실 수 있습니다. 다만, 가독성이 떨어지기 때문에 개인적으로는 추천드리지 않습니다. 코드는 내 실력을 뽐내기보다는 다른 사람들이 이해하기 쉬운 코드를 작성하는 게 더 실력자입니다. 그래도 혹시나 코드를 보셨는데 이해를 못 하시면 안 되니 예시를 들어보겠습니다. 

#include <stdio.h>

int main() {
	int var = 3;

	printf("var is %s\n", var % 2 == 0 ? "even" : var > 0 ? "positive" : "negative");

	return 0;
}

var 변수는 3이기 때문에 짝수가 아니라서 expression if false로 갔는데 또 삼항 연산자가 있습니다. var 변수는 양수이기 때문에 expression if true인 positive가 반환되어 var is positive 출력됩니다. 

 

가독성을 위해서 괄호 사용

사실 여기까지 코드를 작성하면서 제가 일부러 괄호를 안 썼습니다. 삼항 연산자는 괄호를 써주면 condition, expression if true, expression if false 부분이 눈에 잘 들어와 가독성이 높아집니다. 애매할 때는 괄호를 사용해서 실수를 방지하는 것은 어떠신가요? 

중첩 삼항 조건 연산자에서 괄호를 쓴 코드를 예시로 들고 마무리하도록 하겠습니다 .

#include <stdio.h>

int main() {
	int var = 3;

	printf("var is %s\n", (var % 2 == 0) ? "even" : ((var > 0) ? "positive" : "negative"));

	return 0;
}

 

마무리

삼항 조건 연산자에 배워봤는데 어렵지는 않으셨는지요? 생각보다 헷갈리는 게 삼항 연산자인 것 같습니다. if else로 사용하셔도 무방하시니 삼항 조건 연산자를 무조건 쓰실 필요는 없습니다. 위에서도 말씀드렸듯이 쉬운 코드가 젤 좋은 코드입니다. 

반응형

'개발 > C, C++' 카테고리의 다른 글

[C/C++] sizeof 연산자  (0) 2023.09.15
[C/C++] 쉼표 연산자(,)  (0) 2023.09.14
[C/C++] 비트 연산자  (0) 2023.09.11
[C/C++] 논리 연산자  (0) 2023.09.09
[C/C++] 관계 연산자  (0) 2023.09.08