switch


조건 제어문 if의 변형으로 많이 사용하는 제어 문법이 하나 더 있습니다. 바로 switch라는 키워드입니다. if 문법은 다양한 비교 연산자를 통해 조건을 처리할 수 있습니다.

하지만 실제적으로 가장 많이 사용하는 비교 연산자로는 값이 같은지를 판별하는 == 기호 연산자입니다. switch 문법은 다수의 조건을 ==로 비교가 많을 때 이를 보다 쉽게 처리할 수 있는 멀티 분기 조건문 입니다.

PHP 또한 C 언어 스타일의 프로그램 언어처럼 조건 제어문 if문 이외에 멀티 분기 조건 제어문 switch라는 문법을 추가로 제공합니다.

switch 문법을 그림으로 표현하면 다음과 같습니다. 이전의 if문은 yes 또는 no 형태로 두 가지 상태의 값으로 분기되는 것과 달리, 조건값이 같은 다수의 값으로 분기되는 것을 확인할 수 있습니다.

만일 여러 조건을 분개하는 구조를 만들어야 할 때 if elseif를 많이 쓰면 코드상에서 보기 힘든 부분이 있습니다. 여러 개의 if와 else로 구성되는 복잡한 구성을 보다 이해하기 쉬운 코드 형태인 switch 문법으로 작성할 수 있습니다.

즉 switch문은 하나의 입력 값과 동일한 값으로 적용되는 다수의 블록 소스로 구분하고 또한 실행합니다.

switch 문법은 다음과 같습니다. switch 키워드 다음에 조건의 값을 가지는 소괄호 ()와 전체 소스의 조건 분기 블록 중괄호 { }로 구성됩니다.

|문법|

  switch ($n) {
	case label1:
		echo "n 값이 label1일 경우 실행됩니다.";
		break;

	case label2:
		echo "n 값이 label2일 경우 실행됩니다.";
		break;

	case label3:
		echo "n 값이 label3일 경우 실행됩니다.";
		break;

	default:
		echo "n 값이 일치하는 게 없는 경우 실행됩니다.";
  }

switch에서 분기되어 처리되는 소스들은 중괄호 { 로 시작해서 중괄호 }로 끝납니다. 조건의 처리 코드를 삽입하는 { } 안에 두 가지의 서브 명령어 case와 default를 이용하여 여러 일치되는 조건을 작성할 수 있습니다.


case 조건


case 서브 명령 키워드는 switch에 입력된 값이 일치되었을 때 동작하는 코드의 시작 부분을 정의합니다. case 키워드 다음에 일치하는 값을 지정하고 뒤에 콜론(:)을 정의한 다음 작성할 코드를 넣어줍니다. 만일 switch 입력 값이 일치되면 프로그램 로직은 해당 case로 점프하여 하단에 있는 코드를 실행합니다.


default


default 서브 명령 키워드는 switch에 입력된 값과 일치되는 case 값이 없을 때 처리하는 실행 코드입니다. 대부분 switch 처리 맨 하단에 위치하며, 이때 default 키워드와 콜론(:)만 작성합니다. 만일 일치되는 값이 없을 경우에는 프로그램은 default로 정의된 부분으로 점프하여 코드를 실행합니다.

멀티 분기 조건문 switch는 if 조건문보다 빠르게 조건을 분기하여 처리할 수 있습니다. 많은 양의 비교 판단하여 처리하는 조건이 있을 경우 if 명령문보다 자주 사용합니다. if문과 switch문을 비교해보면 단순한 == 비교에 대한 다수 조건 분기는 switch문이 유리합니다.

만일 if문을 사용하여 모든 조건을 비교한다고 하면 각각 비교되는 코드는 모두 실행될 것입니다. if문으로 작성한 조건 제어문이 있을 경우에 다음처럼 작성할 수 있습니다.

예제 파일 switch-01.php

<?php
	$n = "label2";

	if($n == "label1"){
    	echo "n 값이 label1일 경우 실행됩니다.";

	} else if($n == "label2"){
    	echo "n 값이 label2일 경우 실행됩니다.";

	} else if($n == "label3"){
		echo "n 값이 label3일 경우 실행됩니다.";

	} else {
		echo "n 값이 일치하는 게 없는 경우 실행됩니다.";
	}

?>

결과

n 값이 label2일 경우 실행됩니다.

입력된 값에 대해서 모든 조건을 하나씩 비교 처리하여 코드를 실행합니다.
만일, 일치하는 조건이 마지막에 있을 경우 모두 조건을 검사해야 처리 루틴이 모두 실행하는 최악의 결과를 발생하며 성능적인 부담감이 발생할 수도 있습니다.

단순한 == 일치하는 비교로 처리되는 if문은 switch문을 통해 다시 작성할 수 있습니다. switch문은 if문과 달리 동일한 값의 비교만 가능합니다. 특정한 값이 크다, 작다거나 같지 않다라는 산술적인 비교를 처리할 수 없습니다.

switch조건 분기 명령은 조건이 만족하는 곳으로 바로 점프하여 처리를 하기 때문에 빠른 실행과 결과를 처리할 수 있습니다. 중간에 일치하지 않는 코드들은 건너뛰고, 일치하는 작업만 수행을 합니다.

예제 파일 switch-02.php

<?php
	$n = "label1";
	
	switch ($n) {
    	case label1:
      		echo "n 값이 label1일 경우 실행됩니다.";
    		break;

    	case label2:
      		echo "n 값이 label2일 경우 실행됩니다.";
    		break;

    	case label3:
      		echo "n 값이 label3일 경우 실행됩니다.";
    		break;

    	default:
      		echo "n 값이 일치하는 게 없는 경우 실행됩니다.";
	}

?>

결과

n 값이 label1일 경우 실행됩니다.

switch조건 분기문은 입력된 값에 대해서 중괄호 { } 안에서 일치하는 case로 점프하여 break; 또는 제어문 종료 지점 }까지 실행합니다.

앞서 설명을 한 것처럼 case문에서는 >=<= 등 크기를 비교하는 문장을 사용할 수 없습니다.