[C언어-막코딩] 14장 제어문(SWITCH-CASE문)

in #kr-dev5 years ago (edited)

[C언어-막코딩] 14장 제어문(SWITCH-CASE문)



지난 시간에 제어문에서 IF문에 대해 알아 보았는데 이 IF문은 참 OR 거짓으로 선택하는 문이라고 했었습니다. 이 와 비슷한 제어문에 대해 오늘 Switch-Case 문에 대해 알아보도록 하겠습니다. IF문에서는 조건식이 참 거짓으로 해서 선택했다면 Switch-Case문은 특정 값에 해당되는 Case를 선택하는 선택문입니다. 사용과 의미는 IF문과 유사하여 IF문으로 표현할 수 있는 것을 Switch-Case문으로 표현할 수 있고 Switch-Case문으로 표현 할 수 있는 것을 IF문으로 표현 할 수 있습니다. 유사한 의미라면 굳이 Switch-Case문을 쓸 필요가 있을까 하고 생각 할 수 있지만 코딩을 많이 하다보면 IF문과 Switch-Case는 유사하지만 좀 다른 느낌이라는 점을 구별 할 수 있게 되고 나중에 자연스럽게 코딩을 하게 됩니다.

그럼 이제 Switch-Case문에 대해 알아보도록 하겠습니다.

1. Switch-Case문


Switch-Case문은 IF문과 다르게 다양한 선택 Case가 있을 때 사용하는 제어문입니다. 기본 구조는 아래와 같이 표현 됩니다.


a1.jpg

val값이 일치하는 case를 선택하여 해당 명령문을 수행하게 됩니다. 참고로 val이 1이면 첫번째 Case가 선택이 되고 명령문1이 수행 됩니다. 수행이 되고 나서 break문을 만나서 Switch-Case문을 빠져나오게 됩니다. 만약 break문이 없다면 다음 라인인 명령문2가 이여서 수행되고 이렇게 순차적으로 각 라인을 수행하게 됩니다. 선택한 Case만 처리해야 하기 때문에 해당 Switch-Case문을 빠져 나오기 위해 break 명령어를 사용합니다. 보시면 각 Case 별 break 명령어가 있는 이유가 각 Case 별로 명령어를 수행하고 나서 해당 Switch-Case문을 빠져나오라는 의미로 이해하시면 됩니다. 마지막 defalut은 일치하는 Case가 없을 때 선택하는 Case 입니다. 1~n까지 해당된 Val값이 없다면 무조건 defalut문이 수행되고 빠져 나온다고 생각하시면 됩니다.

다음으로 Switch-Case문은 IF문과 유사하다고 했죠. 위 코딩을 IF문으로 표현 해 볼까요.


a2.jpg

Switch-Case와 동일한 코딩입니다. 이렇게 보면 IF문으로 코딩해도 되는데 굳이 Switch-Case문으로 할 필요가 있을까 생각 할 수 있겠죠.
차이점은 코딩을 자세히 보시면 한줄 코딩이라서 차이는 별로 없어 보이지만 IF문에서 명령문이 여러줄의 괄호({})로 묶임 코딩이라면 좀 코딩이 지져분해 집니다. 여러줄의 코딩을 사용자 정의 함수로 해서 함수로 묶어 준다 하더라도 코딩은 Switch-Case문에 비해 약간 가독성이 떨어집니다. 실제 코딩을 해보시면 아시겠지만 불필요한 코딩을 연속해서 else IF문으로 일일히 코딩을 해야 하고 명령문이 길어지면 정리가 안된 코딩처럼 보여서 불편합니다. 그에 반해 Switch-Case문은 여러개의 규칙적인 Case가 깔금하게 보이고 가독성도 좋습니다.

결론은 둘 이상의 선택문일 때는 Switch-Case가 좋고 2개정도의 선택이라면 IF문으로 표현하는 것이 좋습니다. Else IF문을 많이 쓰는 것은 별로 추천드리지 않습니다. IF문과 Switch-Case문에 대한 여러 예제들을 찾아서 코딩하다 보시면 어느게 어떤 상황에서 더 편하게 코딩하고 가독성이 좋은지 연습을 좀 하시면 이해하실 수 있을 거에요.

Switch-Case문을 실제 코딩을 통해 동작 의미를 이해 해 볼까요.

2. 코딩


[소스]

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int val=2;
    
    switch(val){
     case 1 : printf("1이 선택되었습니다.\n");
              break;
     case 2 : printf("2이 선택되었습니다.\n");
              break;
     case 3 : printf("3이 선택되었습니다.\n");
              break;
     default : printf("Case가 없군요.\n");
              break;
    }

    return 0;
}   

[결과]
a3.jpg

val이 2였을 때 Case 2가 선택되어 해당 printf문이 수행되고 빠져 나왔습니다. break 명령문이 없으면 어떻게 되는지도 실행 해 볼까요.

[소스]

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int val=2;
    
    switch(val){
     case 1 : printf("1이 선택되었습니다.\n");

     case 2 : printf("2이 선택되었습니다.\n");

     case 3 : printf("3이 선택되었습니다.\n");

     default : printf("Case가 없군요.\n");

    }

    return 0;
}   

[결과]
11.jpg

보시는 것처럼 case 2가 선택되어 수행되는데 해당 라인에서 부터 다음 case printf문까지 전부 수행되어 결과가 나왔습니다. 이처럼 val이 선택한 case문이 수행되지만 수행된 명령문들이 끝나면 다음 라인으로 자동으로 넘어가게 됩니다. 이렇게 다음 case 라인으로 넘어가지 않고 빠져나오게 하는 명령어가 바로 break 명령문입니다. 어떤 의미인지 실행을 통해 이해 하셨죠.

추가로, defalut문은 여러분들이 val값을 1~3값이 아닌 다른 숫자를 넣어 실행 시켜 보세요. 어느때 defalut문이 수행되는지는 여러분들이 직접 소스를 수정하셔서 실행 시켜보시기 바랍니다.

마무리


제어문에서 어제는 IF문에 대해 알아 보았고 오늘은 Switch-Case문에 대해 알아보았습니다. IF문은 둘중 하나를 선택할 때 코딩하면 좋고 Switch-Case문은 규칙적인 다중 선택문에서 사용하면 좋습니다. 여러분들은 구글 검색을 통해 다양한 예제를 찾으셔서 연습하셔서 어느때 해당 제어문을 사용하면 좋은지 느낌을 구별할 수 있는 능력을 키우시기 바랍니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

switch 문은 break문을 실수로 빠뜨려서 버그가 나오는 경우가 가끔 있지요. 즐거운 화요일 보내세요.

간혹 초보분들이 빼먹고 실수하는 경우가 종종 있지요.
날씨가 우중충 하지만 즐거운 화요일 되세요.

Congratulations @codingman! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 6000 comments. Your next target is to reach 6500 comments.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

The Steem blockchain survived its first virus plague!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.034
BTC 63425.40
ETH 3253.95
USDT 1.00
SBD 3.88