블로그 프로필 이미지

2015. 6. 2. 19:39
SMALL




☞ switch case 문


swicth case 문은 else if 문처럼 다중 선택이 많을 경우 사용하게 된다. 하지만 else if 문과는 차이가 있다. switch case 문은 다중 선택시 else if 문처럼 조건식에 의해 명령문이 실행되는게 아니라, 수식값에 해당되는 값을 찾아낸다. 이러한 점을 빼면 else if 문과 차이가 없는것 같지만 그렇지만은 않다. 


그 이유는 else if 문같은경우 조건식이 여러개로 되어있을 시 최악의 경우 맨 마지막 조건인 else 까지 실행되는 경우가 있다. 이럴경우 프로그램 수행시간이 늘어날 수 있는 단점을 가지고 있다. switch case 문은 else if 의 이러한 단점을 보안해 준다.


아래는 switch case 문의 기본형식과 예제이다. 기본형식을 살펴보면 else if 문과 다르게 별다른 조건식이 아닌 수식을 평가하여 case 의 상수값과 비교를 한뒤 그에 맞는 case 를 실행하게 된다. 또한 switch 수식으로 올 수 있는 값들은 정수형, 문자형, 실수형 등이 있다.


 swicth case 문 기본 형식


switch(수식){
    case 상수1 : 표현식1;
    break;
    case 상수2 : 표현식2;
    break;
    case 상수3 : 표현식3;
    break;
    case 상수4 : 표현식4;
    break;
    default : 표현식5
}


 switch case 문 예제


<?php /* 기호상수 선언 값은 10 */ define('ANG',10); $case = 10; switch($case) { case -1 : echo $case; break; case -1.521 : echo $case; break; case "문자열1" : echo $case; break; case 314.159e-2 : echo $case; break; case 1.234567e5 : echo $case; break; case ANG : echo $case; break; default : echo "Fail"; } /* ======결과======= 10 */ ?>


위의 예제를 살펴보면 상수로 사용되는 값들은 별다른 제한이 없다는것을 알 수 있다. 하지만 상수로 올 수 있는 값들 이외의 값을 집어 넣는다면, PHP 의 구문 오류는 발생하지 않겠지만, 내부적으로 에러가 발생하여 잘못된 결과를 초래할 수 있기 때문에, 이점을 주의해야 한다.



switch case 문 과 else if 문의 차이


switch case 문같은경우 else if 문의 조건식과 다르게 switch 에 지정된 수식값을 확인하여, case 의 상수값과 일치할경우 해당되는 case 를 수행하게된다. 하지만 깊게 보지 않으면, 서로 다른점이 없어 보일 수도 있다. 하지만 내부적으로 보면 그렇지 않다. 


쉽게 생각해 보면, else if 문은 a 라는 값과 일치하는 명령문을 실행하기 위해 계속해서 조건식을 통하여 확인하는 반면 switch case 문은 a라는 값을 먼저 확인한뒤 case 문의 상수값과 일치하는지만을 확인한다. 이러한 점도 겉으로 봐서는 잘 모를 수 있다. 이 말을 다시한번 자세히 알아 본다면, else if 문은 한번 수행할 때마다 조건식을 계속해서 평가해야하지만, switch case 문은 한번 평가된 수식에 의해 조건식 없이 case 의 상수값과 일치하는지만을 확인하므로, else if 문처럼 조건식을 계속 하여 평가하는 일이 없기때문에, 실행 속도가 훨씬 빠르다.


하지만 switch case 문 같은경우 else if 처럼 조건식을 사용할 수 없다는 단점이 있다. 물론 단점이라고 보기보단, 본래 switch case 문 의 특징으로 보는게 맞다.  


위에서 설명한 switch case 문 과 else if 문의 차이점은 아래와 같은 프로그램으로 볼 수 있다. 아래의 프로그램중 첫번째는 곱셈만 해주는 소스이고, 두번째는 덧셈, 뺄셈, 나눗셈, 곱셈 등을 계산해주는 프로그램이다. 


 계산기 프로그램


 곱샘 계산기


<?php function program($num1,$num2) { return $num1*$num2; } echo program(5,10); /* =======결과======== 50 */ ?>


 사칙연산 계산기


<?php function program($num1,$num2,$op) { if($op=='-') return $num1-$num2; else if($op=='+') return $num1/$num2; else if($op=='/') return $num1/$num2; else if($op=='*') return $num1*$num2; else return 0; } echo program(5,10,'*'); /* ========결과========= 50 */ ?>


위의 프로그램 소스에서 첫번째 곱셈 계산기 같은 경우 입력된 숫자만 곱셈연산을 하여 값을 되돌려 주는 반면, 두번째 사칙연산 계산기는 연산자까지 추가하여, 함수 내 조건문에서 연산자의 값과 일치하는 값을 비교한뒤 그에 맞는 값을 되돌려 주게 되는데, 만약 곱셈만 필요한 경우라고 생각한다면, 확실히 이해가 될것이다. 곱셈만 필요한 경우에는 사직연산 계산기를 사용하여 복잡한 과정을 거칠 필요가 없기 때문이다.


이러한 점을 switch case 문 과 else if 문 으로 생각한다면 둘의 차이가 이해가 될것이다. switch case 문 은 switch 에 지정된 수식값이 맞는지 만을 확인하기 때문에, 별다른 조건식이 필요 없는 반면에, else if 문은 조건식을 필수로 입력해주어야 하기 때문에, 똑같은 조건문을 수행하더라도 else if 문은 항상 조건식을 재평가 하게 되는것이다.


결론적으로 같은 결과를 발생시키는 프로그램이라도 내부적으로 구현된 방식이 다르다면, 속도면과 안정성면 그리고 소스 코드의 전체적인 흐름등이 다를 수 밖에 없다. 


이와 같이 개발을 할 시 자주 쓰이는 함수도 특정한 상황에선 불필요하게 많은 과정을 거치는 경우가 있기때문에, 이런점을 잘 확인하여 적절한 함수로 대체를 하면서 개발을 한다면 앞으로 실력향상에 큰 도움이 될 거라고 생각한다.

LIST