PHP는 산술, 할당, 비교 등 다양한 작업을 수행할 수 있는 강력한 연산자들을 제공합니다. 이 글에서는 논리 연산자인 &&와 and에 초점을 맞춰, 두 연산자가 우선순위에 따라 어떻게 다르게 동작하는지 자세히 살펴보겠습니다. &&와 and는 true 또는 false를 결과로 반환하기 때문에 불리언(Boolean) 연산자라고도 불립니다.
'AND' 연산자란?
and 연산자는 두 조건이 모두 참(true)일 때만 true를 반환합니다. 예제를 통해 확인해 보겠습니다.
예제
<?php
$val1 = 20;
$val2 = 50;
if ($val1 == 20 and $val2 == 50)
echo "True";
else
echo "False";
?>
출력 결과:
True
설명:
$val1 = 20, $val2 = 50이므로 조건식 $val1 == 20은 true로 평가되고, $val2 == 50 역시 true로 평가됩니다. 따라서 두 피연산자가 모두 참이므로 최종 결과도 참(True)이 됩니다.
예제 2:
<?php
$a = 30;
$b = 50;
if ($a == 30 and $b == 10)
echo "True";
else
echo "False";
?>
출력 결과:
False
설명:
$a = 30, $b = 50으로 선언했기 때문에 조건식 $a == 30은 true로 평가되지만, 조건식 $b == 10은 false를 반환합니다. AND 연산은 하나라도 거짓이면 전체 결과가 거짓이 되므로 최종 결과는 False입니다.
'&&' 연산자의 동작 방식
&& 연산자도 and 연산자와 동일하게 동작하며, 표현식에서 두 조건(피연산자)이 모두 참일 때만 true를 반환합니다. 아래 예제를 통해 확인해 보겠습니다.
예제:
<?php
$val1 = 25;
$val2 = 5;
if ($val1 == 25 && pow($val2, 2) == $val1)
echo "True";
else
echo "False";
?>
출력 결과:
True
설명:
$val1 = 25, $val2 = 5이므로 조건식 $val1 == 25는 true로 평가되고, pow($val2, 2) == $val1 역시 true로 평가됩니다. $val2 = 5를 제곱하면 25가 되어 $val1과 같기 때문입니다. 따라서 '$val1 == 25 && pow($val2, 2) == $val1'은 true로 평가됩니다. AND 논리에서는 두 피연산자가 모두 참일 때만 결과가 참이 됩니다.
참고:
만약 $val2 = 20으로 선언한다면, pow($val2, 2) == $val1 조건은 400 ≠ 25이므로 false가 되고, AND 연산의 최종 결과 역시 false가 됩니다.
우선순위 관점에서 본 'AND'와 '&&'의 차이
표현식에서 연산은 각 연산자의 우선순위에 따라 수행됩니다. 핵심적인 차이는 바로 여기에 있습니다. && 연산자의 우선순위는 높은 반면, and 연산자의 우선순위는 낮습니다. 아래 예제를 통해 그 차이를 살펴보겠습니다.
<?php
$a = 10;
$b = NULL;
$val = $a && $b;
echo ($val ? 'TRUE' : 'FALSE'), "\n";
$val = $a and $b;
echo ($val ? 'TRUE' : 'FALSE');
?>
출력 결과:
FALSE TRUE
설명:
동일한 피연산자를 사용했음에도 두 연산자의 결과가 서로 다릅니다. 첫 번째 표현식은 FALSE를 출력하고, 두 번째 표현식은 TRUE를 출력합니다.
첫 번째 표현식인 $val = $a && $b;가 FALSE가 되는 이유는, && 연산자의 우선순위가 할당 연산자 =보다 높기 때문에 먼저 && 연산이 수행된 후, 그 결과(false)가 변수 $val에 할당되기 때문입니다.
두 번째 표현식인 $val = $a and $b;가 TRUE가 되는 이유는, and 연산자의 우선순위가 할당 연산자 =보다 낮기 때문입니다. 따라서 등호 오른쪽에 있는 $a의 값(10)이 먼저 $val에 할당됩니다. 이후 내부적으로 'and' 연산이 수행되지만 그 결과는 할당되지 않으므로, $val에는 10이 담겨 있어 결국 TRUE로 평가됩니다.
정리
결론적으로 and 연산자와 && 연산자는 기본적으로 동일한 논리 연산을 수행하지만, 가장 큰 차이점은 우선순위입니다. 조건문(if) 안에서 단독으로 사용할 때는 두 연산자의 결과가 같지만, 할당 연산(=)과 함께 사용할 때는 의도치 않은 버그를 초래할 수 있으므로 반드시 주의해서 사용해야 합니다.