스위치 (프로그래밍)
스위치(switch) 문은 각종 프로그래밍 언어에서 다중 조건문이 있을 때 컴파일러 최적화를 하고 가독성을 높이기 위하여 if문 대신 사용하는 조건문이다.
switch ~ case문[편집]
if문이 프로그램의 흐름을 두 가지 상황으로 나누는 데 반해 switch문은 조건식을 먼저 평가한 뒤 그 식의 값이 case 상수와 일치하는 쪽으로 분기하여 해당 명령문을 수행한다.스위치를 움직이면 스위치가 가리키는 동작을 실행하는 기계 같은 역할을 하는 것이 바로 switch문이다.[1]
문법[편집]
기본적인 문법 형식은 다음과 같다.
switch(조건식) { case 상숫값 1: 명령문 블록 1 break; case 상숫값 2: 명령문 블록 2 break; case 상숫값 3: 명령문 블록 3 break; . . . default : 명령문 블록 n break; }
switch문의 조건식의 결과 값과 case 상숫값이 일치하는지 검사한뒤 일치하는 값이 나오면 그 case문 아래의 명령문 블록을 실행한다. 그러나 여러 개의 case문 중에서 어느 하나라도 일치하는 값이 없으면 default 부분의 명령문 블록을 수행한다. default 부분은 switch문을 사용할 때 반드시 있어야 되는 코드는 아니지만 조건에 맞지 않을경우를 대비하여 만드는 것이 바람직하다.
명령문 중간의 break문은 해당하는 case의 명령문을 빠져나오는 데 필요하므로 빠뜨리지 않도록 주의해야 한다. 예시는 다음과 같다.
switch(num) { case 1 : printf("1"); csae 2 : printf("2");
}
이러한 경우에는 break문이 없기 때문에 1과 2가 동시에 출력되는 상황이 발생한다. 그러기 때문에 항상 case 뒤에 break문을 붙여야 한다.[1]
연산자[편집]
조건식에 조건을 만족하는지 검사하기 위해서 연산자를 사용한다. 대표적으로 사용하는 연산자는 다음과 같다.
- 비교연산자
- == : ~와 같다
- != : ~와 같지 않다
- > : ~보다 크다
- < : ~보다 작다
- >= : 크거나 같다
- <= : 작거나 같다
- 논리연산자
- && : 그리고
- || : 또는
- ! : 참이면 거짓, 거짓이면 참[1]
예제[편집]
프로그래밍을 할때 우리는 어떤 표현식 또는 변수를 여러 값과 비교하는 코드를 짜는 경우가 많다. 예를 들자면 C언어]로 숫자에 따른 과목 분류 프로그램이 있다.
int num; printf("숫자 입력: ); scanf("%d", &num); if(num == 1) { printf("국어"); } else if(num == 2) { printf("수학"); } else if(num == 3) { printf("영어"); } else if(num == 4) { printf("탐구 과목"); } else { printf("잘못된 값을 입력하셨습니다.");
이 코드를 switch문으로 변경하는 코드는 다음과 같다.
int grade; printf("점수 입력: ); scanf("%d", &grade); switch(grade) { case 1 : printf("국어"); break; case 2 : printf("수학"); break;
case 3 : printf("영어"); break;
case 4 : printf("탐구 과목"); break;
default : printf("잘못된 값을 입력하셨습니다."); break; }
이 구문이 실행되면 num이 어떤 값인지를 검사하고 그에 맞는 값의 블록이 실행된다. 예를 들어 3을 입력하면 "영어"가 출력 되고 break문에 의해 switch 문이 종료된다. 확실히 if문과 비교하여 가독성이 높아진 것을 볼 수 있고 실행속도 또한 빠르다.
단점[편집]
switch문은 if문과 같이 조건 제어문에 속한다. 그러나 if문과 차이점은 if문은 조건식이 true 또는 false 일때 블록이 실행된다고 하면 switch문은 비교할 변수가 어떤값을 가지냐에 따라 실행문이 선택된다. 오직 ==만 비교할 수 있는셈이다. 그러므로 모든 switch문은 if문으로 바꿀 수 있지만 if문에서 부등식이 사용된 경우에는 switch문으로 치환할 수 없다.[2] 예를 들어 C언어로 점수에 따른 학점 분류 시스템 코드를 작성하였다.
int grade; printf("점수 입력: "); scanf("%d", &grade); if(grade < 100 || grade >= 90) { printf("A학점"); } else if(grade < 90 || grade >= 80) { printf("B학점"); } else if(grade < 80 || grade >= 70) { printf("C학점"); } else if(grade < 70 || grade >= 60) { printf("D학점"); } else if(grade <60) { printf("F학점"); } else { printf("잘못된 값을 입력하셨습니다.");
만약 이 코드를 switch문으로 치환한다고 하면 switch문은 부등식을 사용할 수 없는 알고리즘이기 때문에 하드코딩을 통해서 엄청난 분량의 코드를 작성해야 할 것이다. 예를 들어 84점인 학생이 있다 치면 if문으로는 부등식을 통해 90에서 80사이인 것을 검사하여 그 블록을 실행시킬 수 있지만 switch문으로는 사이값들(ex) 89,88,87....)을 하나하나 하드코딩을 통해 작성해야 하기 때문에 이러한 경우에는 if문이나 for문을 통하여 코딩하는 것이 유리하다.
각주[편집]
- ↑ 1.0 1.1 1.2 문호석, 손명호, C로 시작하는 컴퓨터 프로그래밍, 《㈜한빛아카데미》
- ↑ , 〈(C언어) Switch문 사용법 & 예제 총정리〉, 《코딩팩토리》, 2019-07-22
참고자료[편집]
- 문호석, 손명호, C로 시작하는 컴퓨터 프로그래밍, 《㈜한빛아카데미》
- 〈C언어 Switch문 사용법 & 예제 총정리〉, 《코딩팩토리》, 2019-07-22
같이 보기[편집]