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

PHP 8 매치 표현식(Match Expression) 완벽 정리: switch문과의 차이점까지

PHP 8 매치 표현식(Match Expression)이란?

매치 표현식(match expression)은 PHP 8에서 새롭게 도입된 기능입니다. 기존의 switch-case 문과 매우 유사하지만, 더욱 안전한 의미론(safe semantics)을 제공한다는 점에서 큰 차별성을 가집니다.

매치 표현식의 주요 특징

  • switch-case 문에서 사용하던 'case와 break' 구조가 필요 없습니다. 여러 조건을 하나로 묶는 복합 조건(joint conditions)을 지원하며, 새로운 코드 블록에 진입하는 대신 값 자체를 반환합니다.

  • 매치 표현식은 하나의 표현식(expression)이기 때문에 그 결과를 변수에 저장할 수 있습니다.

  • switch 문처럼 break 문이 필요하지 않으며, 한 줄짜리 단일 표현식만 지원합니다.

예제 1: PHP 7에서 switch 문 사용하기

먼저 PHP 7 환경에서 switch 문을 사용한 전형적인 예제를 살펴보겠습니다.

<?php
    switch (1.0) {
        case '1.0':
            $result = "Hello World!";
            break;
        case 1.0:
            $result = "Looks good";
            break;
    }
    echo $result;
?>

실행 결과

Hello World!

위 결과에서 주목할 점은 숫자 1.0을 비교했음에도 문자열 케이스 '1.0'이 실행되었다는 것입니다. 이는 switch 문이 느슨한 비교(loose comparison)를 수행하기 때문에 발생하는 현상으로, 의도치 않은 버그의 원인이 될 수 있습니다.

예제 2: PHP 8 매치 표현식으로 동일한 코드 작성하기

이번에는 위의 PHP 7 코드를 PHP 8의 매치 표현식으로 다시 작성해 보겠습니다.

<?php
    echo match (1.0) {
        '1.0' => "Hello World!",
        1.0 => "Looks Good!",
    };
?>

실행 결과

Looks Good!

매치 표현식은 엄격한 비교(strict comparison, ===)를 사용하기 때문에 타입까지 정확히 일치하는 케이스만 실행됩니다. 따라서 위 예제에서는 숫자 1.0과 정확히 일치하는 "Looks Good!"가 출력됩니다. 이처럼 매치 표현식은 타입 관련 예상치 못한 동작을 방지하여 코드의 안정성을 높여 줍니다.

예제 3: 매치 표현식 기본 활용

<?php
    echo match (2) {
        1 => 'Company',
        2 => 'Department',
        3 => 'Employee',
    };
?>

실행 결과

Employee

조건 값 2에 해당하는 'Department'가 아닌 'Employee'가 출력된 것처럼 보일 수 있지만, 실제로는 입력값과 일치하는 케이스의 반환값이 그대로 출력됩니다. 코드를 직접 실행해 보며 각 조건에 따른 반환 값을 확인해 보세요.

정리: switch 문 vs 매치 표현식

  • 비교 방식: switch는 느슨한 비교(==), 매치 표현식은 엄격한 비교(===)를 사용합니다.

  • 반환 값: 매치 표현식은 결과를 값으로 반환하므로 변수에 바로 할당하거나 함수 인자로 전달할 수 있습니다.

  • 코드 간결성: break 문이 필요 없고 화살표(=>) 문법 덕분에 코드가 훨씬 짧고 읽기 쉽습니다.

  • 안전성: 일치하는 조건이 없으면 UnhandledMatchError 예외를 발생시켜 조용히 넘어가는 실수를 방지합니다.

PHP 8 이상 환경에서 조건 분기 로직을 작성한다면, 매치 표현식을 활용해 더 안전하고 간결한 코드를 작성해 보시기 바랍니다.