Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP switch 문 완벽 가이드 – 조건 분기를 깔끔하게 처리하는 방법

소개

프로그램에서 하나의 표현식 값에 따라 서로 다른 처리를 해야 하는 상황이라면, 일련의 if 문을 나열하는 방식은 각 조건마다 중괄호 블록이 따로 필요해 코드가 길어지고 지저분해지기 쉽습니다. 이럴 때 switch-case 구조를 활용하면 프로그램을 훨씬 간결하고 읽기 쉽게 만들 수 있습니다.

switch 구조를 사용하면 동일한 변수(또는 표현식)를 여러 개의 서로 다른 값과 비교하고, 일치하는 값에 따라 각각 다른 코드 블록을 실행할 수 있습니다.

기본 문법

switch (expr) {
    case val1:
        // expr이 val1과 일치할 때 실행할 코드
    break;
    case val2:
        // expr이 val2와 일치할 때 실행할 코드
    break;
    ...
    ...
    default:
    // 위의 어떤 값과도 일치하지 않을 때 실행할 코드
}

각 case 블록 끝에는 반드시 break 문을 작성해야 합니다. break가 없으면 프로그램 흐름이 일치한 case 이후의 나머지 case들로 계속 이어져 실행되는 fall-through 현상이 발생하기 때문입니다.

다음 예제에서는 사용자에게 두 개의 숫자와 연산 종류(1/2/3/4 = 더하기/빼기/곱하기/나누기)를 입력받아 해당 연산을 수행합니다.

예제 1: 숫자 연산 처리

<?php
$first=(int)readline("enter a number");
$second=(int)readline("enter another number");
$x=readline("enter 1/2/3/4 for add/subtract/multiply/divide");
$result=0;
switch($x){
    case 1: echo $first+$second; break;
    case 2: echo $first-$second; break;
    case 3: echo $first*$second; break;
    case 4: echo $first/$second; break;
    default: echo "Incorrect input";
}
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −

Incorrect input

default 키워드는 switch 표현식이 어떤 case와도 일치하지 않을 경우 실행될 문장 블록을 지정하는 역할을 합니다. 위 예제에서는 1~4 외의 값이 입력되었기 때문에 default 블록의 메시지가 출력된 것입니다.

빈 case 블록의 동작

특정 case 블록이 비어 있으면, 별도의 처리 없이 프로그램 흐름이 그대로 다음 case로 넘어갑니다. 이 특성을 활용하면 여러 값을 하나의 실행 블록으로 묶어 처리할 수 있습니다.

예제 2: 여러 case 묶기

<?php
$x=(int)readline("enter a number");
switch($x){
    case 1:
    case 2: echo "x is less than 3"; break;
    case 3: echo "x is equal to 3"; break;
    case 4: echo "x is greater than 3"; break;
    default: echo "x is beyond 1 to 4";
}
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −

x is beyond 1 to 4

case 1과 case 2가 비어 있는 채로 연달아 배치되어 있으므로, x가 1 또는 2일 때 모두 "x is less than 3"이 출력됩니다.

문자열 값 비교하기

switch 문에서는 숫자뿐만 아니라 문자열 값과도 표현식을 비교할 수 있습니다.

예제 3: 문자열 매칭

<?php
$x=readline("enter a something..");
switch($x){
    case "India": echo "you entered India"; break;
    case "USA": echo "You typed USA"; break;
    case "Mumbai": echo "you entered Mumbai"; break;
    default: echo "you entered something else";
}
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −

you entered something else

마무리 및 참고 사항

switch 문은 하나의 변수를 여러 값과 비교해야 할 때 if-else 문보다 가독성이 뛰어난 선택입니다. 다만 다음 사항을 항상 기억하세요.

• 각 case 블록 끝에는 의도적으로 fall-through를 만들려는 경우가 아니라면 break를 반드시 작성합니다.
• 어떤 case에도 해당하지 않는 입력을 처리하기 위해 default 블록을 습관적으로 포함하는 것이 좋습니다.
• switch 문은 느슨한 비교(==)를 사용하므로, 타입까지 엄격하게 비교해야 한다면 PHP 8부터 도입된 match 표현식을 대안으로 고려해볼 수 있습니다.