SturdyCobble's Study Note

[프로그래밍] 3.2 제어문(2) - switch/case문 본문

휴지통/['19.06-'20.07]프로그래밍101

[프로그래밍] 3.2 제어문(2) - switch/case문

StudyingCobble 2019. 8. 4. 13:34

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


 

※이 글은 프로그래밍 언어에 대한 기초적인 이해를 가정하고 있습니다. 최소 프로그래밍 언어 하나 정도를 약간이라도 접해보시는 것을 추천합니다. 또한, 이 글은 심화 내용은 되도록 피하여 서술했습니다.

 

switch문은 if문과 비슷하지만, 여러가지 케이스에 따라 실행할 내용을 달리 해야 할 필요가 있을 때 유용하게 이용될 수 있습니다. (참고로 switch문은 Python에 존재하지 않습니다. Python에서 switch 문법을 대신할 수 있는 코드는 아래에 따로 언급하도록 하겠습니다.)

 

switch문은 C/C++, Java에서 다음과 같이 사용됩니다.

 

switch( 변수 ){
    case 값1:
        실행 내용 1;
        break;
    case 값2:
        실행 내용 2;
        break;
    case 값3:
        실행 내용 3;
        break;
    case 값4:
        실행 내용 4;
        break;
    default:
        실행 내용 5;
        break;
}

 

이 때, 변수의 값을 판단에서 위에서 부터 값1인 경우 실행 내용 1을, 값2인 경우 실행 내용 2를 실행하며, 차례로 나아가다가 나머지 경우에는 default:에 있는 실행 내용 5를 실행하게 됩니다. 이때 입력 변수는 C언어의 경우 int형이며, Java의 경우 int형이나 String형이 오게 됩니다.

 

 이때, break;는 switch문을 중간에 중단시키는 역할을 합니다. 만약 break;문이 없다면, 계속 아래 케이스로 넘어가게 됩니다.

 

 switch문은 100% if, else문으로 변환할 수 있지만, 그 반대는 불가능합니다. 하지만, 코드를 정형화하여 나타낼 수 있기에, 때때로 사용되게 됩니다. 아래 예시를 참고해봅시다.

 

int keyNum = 75;
switch(keyNum){
  case 75: System.out.println("Left Key"); break;
  case 77: System.out.println("Right Key"); break;
  case 72: System.out.println("Up key"); break;
  case 80: System.out.println("Down key"); break;
  default: System.out.println("ERROR : Can't Identify the Key Code"); break;
}

방향키 코드를 입력 받은 상황에서 이를 비교하는 상황을 가정했을 때, 위와 같은 코드로 간단하게 키가 어떤 키인지 판단해볼 수 있습니다.

 

그런데, 여기서 왜 실수를 대입할 수 없을 지 의문이 드실 것입니다. 이는 실수가 정확히 메모리에 저장될 수 없기 때문입니다. 아래 코드의 결과를 예상해봅시다.

 

float num1 = 7.57;
if(num1 == 7.57){
  printf("EQUAL");
}
else{
  printf("NOT EQUAL");
}

 

EQUAL을 예상하겠지만, 결과를 함부로 예상할 수 없습니다. 이는 실수를 저장하는 과정에서 정밀도가 약간 떨어지기 때문입니다. 이 코드를 실행한 결과, 제 경우 NOT EQUAL을 얻었습니다. 따라서, 실수는 동등함을 보장하기가 힘드므로, 이후 다룰 절댓값 함수를 이용해, 일정 범위내에서 일치함을 보여주는 것이 좋습니다.

 

 

 

한편, Python에는 switch문이 없는데, 이 경우 Dictionary 자료형(이후 다루겠습니다.)을 이용해서 비슷하게 처리할 수 있습니다. 이에 대해서는 나중에 다시 다뤄보겠습니다. 아니면, if문도 당연히 가능하겠죠?

 

 

 

 

지금까지 배운 if문과 switch문을 순서도(Flow Chart)로 나타내보면 아래와 같이 나타내볼 수 있습니다.

1
2
3
4
5
6
7
8
9
int num = 0;
 
cin >> num ;
 
if( num < 10 ){
 
  cout << "num이 10보다 작습니다" << endl;
 
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int num = 0;
 
cin >> num ;
 
switch( num ){
 
  case 0 : 
 
   cout << "num이 0입니다" << endl;
 
  case 1:
 
   cout << "num이 0입니다" << endl;
 
  default:
 
   cout << "num이 0, 1이 아닙니다" << endl;
 
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int num = 0;
 
cin >> num ;
 
if( num < 10 ){
 
  cout << "num이 10보다 작습니다" << endl;
 
}
 
else if( num > 0 ){
 
  cout << "num이 0보다 큽니다" << endl;
 
}
 
else{
 
  cout << "이도 저도 아닙니다" << endl;
 
}
cs

 

Comments