본문 바로가기

Programming/.NET

[C#] 07. 조건분기문(if-else, switch-case)

[C#] 07. 조건분기문(if-else, switch-case)

 

이번 글에서는 조건분기문에 대해 이야기해보겠습니다.

조건분기문은 조건에 따라 해당 내용을 수행하는 구문입니다. 
여기에는 if문과 switch문이 포함됩니다.

 

if-else문

if-else문은 if, else if와 else 이렇게 세 가지로 이루어진 구문입니다.

else if와 else의 경우는 if문에 종속적이기 때문에 단독으로 사용할 수 없으며 반드시 if문을 먼저 사용해야 합니다. 


우선 if문의 구조는 아래와 같습니다.

이러한 기본 구조는 조건식이 참인 경우 내용을 수행합니다.

if-else문의 구조

 

또한 if와 else if, else를 같이 사용하면 구조는 아래와 같습니다.

이렇게 if와 else if, else로 구성된 if구문은 가장 위의 if부터 차례적으로 검사하고

참인 경우 해당 조건식의 구문을 수행한 후 조건분기문이 종료됩니다.

만약 참인 조건식이 없고 마지막 분기에 else가 있으면

else의 조건식 구문을 수행하게 됩니다.

(참인 조건식이 없고 마지막 분기도 else if면 조건분기문은 그대로 마무리됩니다.)

if-else문의 구조

※ 중괄호인 {}로 감싸인 코드가 한 줄인 경우에는 중괄호를 생략할 수 있습니다.

 

그러면 몇 개의 예제를 보며 설명을 이어가겠습니다.
먼저 아래 예제는 a와 b에는 각각 '10'과 '20'을 할당했으며 조건으로 'a < b'를 설정했습니다.
조건 결과가 참이기에 이 예제는 if문의 WriteLine문을 수행했습니다.

if-else문 예제

 

그러면 이어서 조건으로 거짓인 'a > b'로 설정한 예제를 보도록 하겠습니다.
이 예제는 조건 결과가 거짓이기에 if문의 WriteLine문은 수행하지 않았습니다. 

if-else문 예제

 

이번에는 else if와 else를 사용한 사용한 예제를 확인해보겠습니다.

if-else문 예제

위의 예제를 확인해보면 첫 번째 조건부터 차례대로 확인하며

조건식이 참인 두 번째 조건의 구문을 실행하고 조건분기문은 종료됩니다.

 

그러면 이번에는 조건분기문의 약간은 다른 사용방법에 대해 설명을 해보고자 합니다.

아래의 두 예제는 결과 값은 같지만 프로세스 방식에서 차이를 보입니다.

먼저 좌측의 경우 총 다섯 개의 if문으로 구성되었으며 첫 번째 if문이 참이지만 나머지 모든 if문의 조건식을 체크합니다.

하지만 우측의 경우에는 한 세트의 if-else구문으로 구성되어 있으며 가장 첫 번째 if문이 참이기 때문에 나머지 else if문은 체크하지 않고 마무리됩니다.

if-else문 예제

 

그리고 if문은 중첩 사용에 대한 예제도 확인해 보겠습니다.

아래 예제처럼 if문 안에서 if문을 사용하는 방법으로도 많이 사용합니다.

중첩 사용의 경우 코드를 구성하다 보면 굉장히 많이 사용하는 방법 중 하나입니다

하지만 중첩되는 중첩되는 횟수가 너무 많으면 가독성이 떨어지는 점은 감안하셔야 합니다.

if-else문 예제

 

switch-case문

그럼 이어서 switch문에 대해 알아보도록 하겠습니다.

switch-case문도 if-else문과 같은 조건분기문으로 사용법 또한 비슷하며 switch에 종속적인 case는 단독으로 사용될 수 없습니다. 

 

먼저 기본적인 구조는 아래와 같습니다.

switch-case문의 구조

switch-case문의 구조에 대한 설명을 조금 덧붙이면

먼저 switch문은 중괄호로 감싸지만 case의 경우에는 중괄호를 사용하지 않습니다.

또한 각 case의 마지막에는 해당 case구문이 종료한다는 뜻의 break를 사용해야 합니다.

이 break에서 해당 switch구문은 마무리되는 것입니다.

만일 break가 없는 경우에는 아래와 같은 오류가 발생하니 참고하시기 바랍니다.

switch-case문 오류

 

그러면 예제를 보며 이어가겠습니다.

아래의 예제에서는 a에 '10'을 할당했으며 switch문은 a에 할당된 내용을 검사하여 수행하는 예제입니다.

첫 번째 case에서 10을 내용을 수행하게 됩니다.

switch-case문 예제

 

이번 예제는 default에 대한 내용입니다.

switch-case구문에서도 if-else구문의 else와 같은 기능을 하는 부분이 바로 default입니다.

모든 case의 조건이 맞지 않는 경우 default에 구성된 내용을 수행하고 switch-case문은 마무리됩니다.

혹시나 default를 구성하지 않은 경우에는 그냥 마무리됩니다.

switch-case문 예제

 

switch-case문 역시 if-else와 마찬가지로 중첩해서 사용할 수 있습니다.

하지만 아래 예제에서 보이는 것처럼 하나만 중첩해도 굉장히 읽기 싫은 코드가 되니

가급적이면 안 쓰는 것이 좋겠다는 것이 개인적인 생각입니다.

switch-case문의 중첩

 

저 같은 경우에는 조건에 수식이 오는 경우에는 if-else문을, 조건이 특정 값인 경우에는 switch-case문을 사용합니다.

하지만 코드를 한 두줄 정도만 추가한다면 if-else문과 switch-case문 둘 중 어느 것을 사용하더라도 같은 결과가 나올 수 있습니다.

 

저 같은 경우에는 if-else만 주로 사용하다 보니 종종 if-else문으로 만들어 놓고 switch-case문으로 변경하는 경우가 있습니다.

이러한 경우 막상 if-else로 구성하고 보니 "이건 switch-case가 더 효율적이겠다"하는 경우입니다.

 

효율의 문제이지 무조건 이거다는 없으니 두 가지 골고루 사용해 보시는 것을 추천합니다.

그러다 보면 상황에 따라 어느 조건분기문이 나을 거 같다는 것이 생기실 겁니다.

(단순하게 if와 else로 딱 두 가지로만 구성되는 조건분기문이라면 앞서 설명드린 삼항연산자로도 충분히 가능하니 삼항연산자도 한번 사용해보시는 것은 어떠실까 합니다.)

 

 

여기까지 조건분기문에 대한 설명이었습니다.

다음 글부터는 조건분기문과 함께 많이 쓰이는 구문인 반복문에 대해 알아보도록 하겠습니다.

 

감사합니다.

'Programming > .NET' 카테고리의 다른 글

[C#] 08. 반복문(for, for-each)  (0) 2020.06.15
[C#] 08. 반복문(while, do-while)  (0) 2020.05.25
[C#] 삼항 연산자  (0) 2020.05.04
[C#] 06. 연산자(관계, 논리, 비트)  (0) 2020.04.24
[C#] 06. 연산자(수식, 증감, 할당)  (0) 2020.04.12