다수의 분기 else if


선택과 결정을 하는 조건 제어문은 참과 거짓 이분법적인 논리를 판단(결정)하여 동작합니다. 하지만 이분법적인 논리 판단은 다양한 조건을 처리하는 데는 제약이 있습니다.

만일 우리의 선택 결정할 수 있는 조건이 세 가지, 네 가지일 경우도 있습니다. 즉, 시험 문제를 풀거나 여러 가지 경우 중 하나를 선택하는 것입니다.

다양한 조건으로 판별해야 할 때는 어떻게 해야 할까요? 이런 경우를 대비하여 조건 제어문은 else if 명령을 통해 새로운 조건을 추가로 연결할 수 있습니다.

else if는 else 거짓 조건에 또 다른 조건문을 연장하는 것입니다. 즉, 거짓일 때의 코드 블록이 또 하나의 조건문인 것입니다.

|문법|

if (조건1) {
 조건1  동작 실행 코드;
} else if (조건2) {
 조건1이 거짓이고, 조건2가 참일  동작 처리;
} else {
 조건1과 조건2가 모두 거짓일  동작 처리;
}

else if를 기존 방법으로 다시 풀어서 설명하면

if ( 조건1 ) {
	조건1   동작 실행코드실행 코드;
} else {
	if ( 조건2 ){
		조건1이 거짓이고, 조건2가 참일  동작 처리;
	} else {
		조건1과 조건2가 모두 거짓일  동작 처리 ;
	}
}

와 같다고 표현을 재구성 해볼 수 있습니다. 하지만 이러한 표현은 다수의 중괄호{} 블록을 만들어 내고 쉽게 이해 및 이해하기 어려운 부분이 있습니다.

else if를 이용하여 조건을 연결할 때는 연결 갯수 제한이 없습니다. 필요한 만큼 연결을 추가하여 복잡한 다수의 조건들을 처리할 수 있습니다.

이러한 조건 체인을 순서도로 그려보면 다음과 같을 수 있습니다.

숫자를 구별하는 예제를 조건 체인을 통해 예제를 작성해보겠습니다. 숫자를 구분해보면 양수, 음수와 0으로 세 가지 상태로 구별해 볼 수 있습니다.

예제 파일) if-05.php

 <?php
	$num = 5;

	if ($num > 0) {
		echo "양수입니다.";
	} else if ($num < 0) {
    		echo "음수입니다.";
	} else if ($num == 0) {
		echo "0 의 값입니다.";
	} else {
    		echo "알 수 없습니다..";
	}

?>

결과

양수입니다.

위의 예는 간단하게 두 개의 조건 체인을 통해 값을 판별하는 예제입니다. 먼저, $num 값이 크기 비교연산자를 통하여 0보다 큰 값인지 확인합니다. 큰 값이면 “양수입니다.” 문자열을 출력합니다. 만일 값이 양수가 아닌 거짓(false)으로 판별되면 다음 설정된 2차 조건문을 실행합니다.

2차 조건에서도 크기 비교연산자를 통하여 0보다 작은 값인지 판별합니다. 0보다 작은 값이면 “음수입니다.” 문자열을 출력합니다.

하지만 수의 표현에는 양수와 음수가 아닌 수 0이 있습니다. 만일 값이 앞의 양수도 아니고, 현재 조건인 음수도 아니면(거짓), 다음 3차 조건으로 또 다시 조건을 판단을 합니다.

비교연산자를 통하여 값이 0이 같은지를 판단합니다. 값이 0이면 “0의 값입니다.” 문자열을 출력합니다. 일반적으로 숫자가 양수나 음수가 아니면 0으로 판단할 수 있겠지만 혹시 입력되는 $num이 숫자가 아닐 수도 있습니다.
따라서 이러한 예외도 생각해서 $num의 값이 0인지 판별합니다.

마지막 else는 $num이 숫자가 아닌 양수, 음수, 0을 판별할 수 없을 때 “알 수 없습니다..” 문자열을 출력합니다.

하지만 조건문을 많이 사용할수록 프로그램의 실행 성능은 차이가 있을 수 있습니다. Low-level 언어인 어셈블리로 보면 조건문은 cmp 기호로 CPU의 많은 리소스를 차지하게 됩니다. 그렇다고 해서 조건문을 줄여서 최적화하여 개발하라고 애기하는 것은 아닙니다. 요즘은 컴퓨터의 성능이 많이 좋아졌기 때문에 수많은 조건을 처리하기에 부족함이 없습니다.

선택 조건 제어문은 프로그램 개발 경험이 많을수록 다양한 예외에 대한 처리를 준비하고 코드로 작성하는 것이 중요합니다. 컴퓨터는 사람이 일반적으로 생각하는 것과 달리 모든 상황별 예외를 정의해야 합니다.