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

PHP 삼항 연산자 vs Null 병합 연산자(??), 차이점 완벽 정리

PHP에서 조건에 따라 값을 선택할 때 자주 사용되는 두 가지 연산자가 있습니다. 바로 삼항 연산자(Ternary Operator)Null 병합 연산자(Null Coalescing Operator, ??)입니다. 두 연산자는 비슷해 보이지만 내부적으로 평가하는 방식과 용도에서 중요한 차이가 있습니다.

삼항 연산자 (Ternary Operator)

삼항 연산자는 길게 작성해야 하는 if-else 문을 한 줄로 간결하게 표현할 때 사용합니다. 조건의 참·거짓 여부에 따라 두 표현식 중 하나를 반환합니다.

문법

(condition) ? expression1 : expression2;

동일한 표현식

if(condition) {
    return expression1;
}
else {
    return expression2;
}

조건(condition)이 true이면 expression1의 결과를 반환하고, false이면 expression2의 결과를 반환합니다. 조건부와 표현식에는 void 값을 사용할 수 없습니다.

Null 병합 연산자 (Null Coalescing Operator)

Null 병합 연산자는 변수가 null일 경우 기본값을 제공하기 위해 사용됩니다. PHP 7부터 도입되었으며, isset()으로 값의 존재 여부를 확인하고 값을 가져오는 과정을 한 번에 처리할 수 있어 코드가 훨씬 간결해집니다.

문법

(variable) ?? expression;

동일한 표현식

if(isset(variable)) {
    return variable;
}
else {
    return expression;
}

변수가 null이면 expression의 결과를 반환하고, null이 아니라면 변수 값을 그대로 반환합니다. 특히 존재하지 않는 배열 키나 정의되지 않은 변수에 접근할 때도 오류(Notice/Warning)를 발생시키지 않으므로, 외부 입력값을 다룰 때 매우 유용합니다.

예제

<!DOCTYPE html>
<html>
<head>
   <title>PHP Example</title>
</head>
<body>
   <?php
      // $_GET['user'] 값을 가져오고, username이 전달되지 않으면
      // 'not passed'를 반환합니다.
      $username = $_GET['username'] ?? 'not passed';
      print($username);
      print("<br/>");
      // 삼항 연산자를 사용한 동일한 코드
      $username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
      print($username);
      print("<br/>");
   ?>
</body>
</html>

실행 결과

not passed
not passed

위 예제에서 볼 수 있듯이, Null 병합 연산자는 isset() 검사를 포함한 삼항 연산자와 동일한 결과를 더 짧은 코드로 만들어 줍니다.

핵심 차이점 요약

삼항 연산자는 단순히 조건식을 평가하여 두 표현식 중 하나를 선택합니다. 반면 Null 병합 연산자는 isset() 검사가 내장되어 있어, 정의되지 않은 변수나 null 값에 대해서도 오류 없이 안전하게 기본값을 지정할 수 있습니다.

따라서 $_GET, $_POST처럼 값이 전달되지 않을 수 있는 외부 입력의 기본값 처리에는 Null 병합 연산자(??)를 사용하는 것이 더 간결하고 안전한 방법입니다.