본문 바로가기
C++/기초

C++ 기초 : switch 구문 / 삼항 연산자

글: 시플마 2024. 2. 12.

if / else 구문과 비슷한 switch 구문을 알아봅시다.

 

 

switch 구문은 아래 그럼처럼 사용됩니다.

 

switch문에 들어온 값이 10인 경우, case 10으로 들어가 코드를 실행합니다.

만약 switch문에 들어온 값이 20이라면 case 20으로 들어가 코드를 실행할 것입니다.

default는 어떤 조건에도 해당하지 않으면 실행되는 부분입니다.

break는 해당 구문을 빠져나오라는 의미로

switch문에서 나오라는 명령입니다.

 

 

여기서 주의할 점은

break가 없다면 여러가지 case를 실행하게 될 수도 있다는 점입니다.

 

위 코드를 보면

case 10에 break가 없습니다.

switch문에 들어온 값이 10이니까 case 10으로 들어가

코드를 실행하게 될 것입니다.

그러나 break가 없기 때문에 case 20의 코드까지 실행하고 

case 20에 있는 break를 만나 switch문을 빠져나올 것입니다.

 

분명 switch문에 들어온 값이 10인 경우

case 10의 코드만 실행하기를 원했지만

case 20의 코드까지 실행되는 문제가 발생하게 됩니다.

 

그러나 이를 C++ 문법 오류가 아니므로 주의해야 합니다.

문법 오류가 발생하지 않는 이유는 

아래 코드처럼

이것을 의도하여 사용하는 경우도 있기 때문입니다.

 

switch문에 들어갈 값을 변수를 통해 넣을 수 있습니다.

이 변수에 들어가 있는 값으로 case를 따질 수도 있습니다.

 

변수 iTest의 값은 10입니다.

그러므로 case 10으로 들어갑니다.

break가 없으므로 밑에 case 20으로 들어갑니다.

(코드가 따로 존재한다면 그 코드를 실행하고 case 20으로 들어갈 것입니다.)

여기에도 break가 없으므로  case 30으로 들어갑니다.

코드를 실행한 후 break를 만나므로 switch문을 빠져나옵니다.

 

이처럼 iTest에 10 또는 20 또는 30이 들어온 경우에도

모두 같은 코드를 실행시키고 싶다면

의도적으로 break를 빼서 사용할 수도 있기에 

문법 오류로 보지 않는 것입니다.

 

 

이를 if문으로 바꾸어 표현한다면

 

위처럼 표현할 수 있겠죠.

비교 연산자와 논리 연산자 중 비교 연산자가 먼저 계산됩니다.

 

iTest == 10 || iTest == 20 을 해석하면

iTest에 대입된 값과 10이 같은지

물어보고 있습니다. 아니므로 거짓인 0이 됩니다.

0 || iTest == 20 을 보면

iTest의 값과 20이 같은지 물어보고 있습니다.

아니므로 거짓인 0이 됩니다. 따라서

0 || 0 이 됩니다.

거짓과 거짓을 ||(OR) 연산하면 결국 거짓(0)이 됩니다.

0 || iTest == 30 을 해석하면

iTest에는 30이 대입되어 있으므로

30이랑 같은지 묻는다면

이는 참입니다.

0 || 1 이 되겠죠?

거짓인 0과 참인 1을 || 연산하면 결국 1이라는 결과가 나옵니다.

참이므로 if문 안에 있는 내용이 실행됩니다.

 

만약 iTest의 값이 10도 아니고 20도 아니고

30도 아니라면 else문 안에 있는 내용이 실행될 것입니다.

switch문의 default와 if문의 else와 같은 역할입니다.

 

 

 

 


 

 

아래와 같은 코드가 있습니다.

변수 iTest의 값이 10인 경우 변수 iTest에 100을 대입하고

아닌 경우 iTest에 200을 대입하는 코드입니다.

 

 

위 코드를 삼항 연산자를 통해

간결하게 표현할 수 있습니다.

iTest == 10 ? iTest = 100 : iTest = 200;

 

iTest의 값이 10과 같은지 물어봅니다. (? 앞의 내용)

같은 경우 iTest에 100을 대입합니다. ( : 기준 오른쪽 내용) 

아닌 경우 iTest에 200을 대입합니다. ( : 기준 왼쪽 내용)

 

삼항 연산자의 구조는 

조건식 ? 조건식이 참이면 여기를 실행 : 조건식이 거짓이면 여기를 실행

임을 알 수 있습니다.

 

삼항 연산자를 사용하여 표현하면 

여러 줄로 구성해야 할 내용을

한 줄로 표현할 수 있다는 장점이 있습니다.

그러나 가독성이 떨어지는 편이죠.

 

if문을 사용하여 표현하면 

가독성이 뛰어나지만 

코드가 길어진다는 단점이 있습니다.

 

보통 코드가 길어져도 확실하게 

알아볼 수 있는 if문을 사용하기는 하지만

삼항 연산자가 있다는 것도 알아 두면 좋습니다.

 

 

 


 

 

 

마찬가지로 switch문과 if문은 비슷하지만

각각 장점과 단점이 존재합니다.

 

switch문은 case별로 정리가 되어 있어

가독성이 좋습니다.

그러나 switch문에 들어간 값과 동일한 case로 들어가

실행하게 됩니다.

이러한 방식은 조건이 복잡한 경우 

표현이 힘든 경우가 있습니다.

 

반면 if문은 식이 복잡해도 상황에 맞는 코드를 실행할 수 있습니다.

그러나 else if를 통해 여러 조건을 붙이다 보면 

코드가 길어져 가독성이 떨어진다는 단점이 있습니다.

 

이렇게 각각 장점과 단점이 있기 때문에

꼭 switch문을 써야 한다, 꼭 if문을 써야 한다기보다는

코드를 작성하는 사람의 스타일과 상황에 맞는

구문을 사용하는 것이 좋습니다.

 

 

 

 

강의 출처 : https://www.youtube.com/watch?v=PFc4g8mxOiI&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&pp=iAQB


 

 

'C++ > 기초' 카테고리의 다른 글

C++ 기초 : 비트 연산자 (2)  (0) 2024.02.16
C++ 기초 : define / 비트 연산자 (1)  (0) 2024.02.15
C++ 기초 : if / else 구문  (0) 2024.02.10
C++ 기초 : 비교 연산자  (0) 2024.02.10
C++ 기초 : 논리 연산자  (0) 2024.02.09