PHP 논리 연산자, 왜 두 종류일까?
PHP에서는 논리곱(AND)을 나타내는 연산자가 'AND'와 '&&' 두 가지입니다. 기능 자체는 동일하게 두 피연산자가 모두 참(true)일 때 참을 반환하지만, 결정적인 차이는 바로 연산자 우선순위(precedence)에 있습니다.
'AND' 논리 연산자
'AND' 연산자는 논리곱 연산자이지만, 우선순위가 대입 연산자(=)보다 낮습니다. 따라서 표현식을 작성할 때 의도치 않은 결과가 발생할 수 있습니다.
'&&' 논리 연산자
'&&' 연산자 역시 논리곱 연산자이지만, 우선순위가 대입 연산자(=)보다 높습니다. 일반적으로 개발자가 기대하는 방식으로 조건식이 먼저 평가된 후 결과가 변수에 대입됩니다.
예제 코드
아래 예제를 통해 'AND'와 '&&' 연산자의 차이를 직접 확인할 수 있습니다.
<!DOCTYPE html>
<html>
<head>
<title>PHP Example</title>
</head>
<body>
<?php
$x = true;
$y = false;
// AND 연산자 사용
$result = $x AND $y;
print('$result = $x AND $y');
print("<br/>");
var_dump($result);
print("<br/>");
// && 연산자 사용
$result = $x && $y;
print('$result = $x && $y');
print("<br/>");
var_dump($result);
?>
</body>
</html>실행 결과
$result = $x AND $y bool(true) $result = $x && $y bool(false)
결과 분석
출력 결과가 다른 이유는 연산자 우선순위 때문입니다.
$result = $x AND $y는($result = $x) AND $y로 해석됩니다. 즉,$result에$x(true)가 먼저 대입되고, 그 후 AND 연산이 수행됩니다. 따라서$result의 값은 true가 됩니다.$result = $x && $y는$result = ($x && $y)로 해석됩니다. 조건식이 먼저 평가되어 false가 되고, 이 결과가$result에 대입됩니다. 따라서$result의 값은 false가 됩니다.
정리 및 권장 사항
두 연산자의 차이를 요약하면 다음과 같습니다.
| 연산자 | 종류 | = 연산자 대비 우선순위 |
|---|---|---|
| && | 논리곱 | 높음 (조건식이 먼저 평가됨) |
| AND | 논리곱 | 낮음 (대입이 먼저 수행됨) |
실무에서는 혼란을 방지하기 위해 조건문과 대입식에서는 '&&' 사용을 권장합니다. 'AND', 'OR' 같은 영문 연산자는 우선순위가 낮다는 특성을 활용한 특수한 경우에만 신중하게 사용하는 것이 좋습니다.