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