DivisionByZeroError란 무엇인가?
DivisionByZeroError 클래스는 ArithmeticError 클래스의 하위 클래스입니다. 이 오류는 나눗셈 연산에서 분모 값이 0일 때 발생하며, 다음과 같은 경우에도 나타날 수 있습니다.
- 나머지 연산자(%)의 두 번째 피연산자가 0인 경우
- intdiv() 함수의 두 번째 인수가 0인 경우
DivisionByZeroError 발생 예시
첫 번째 예제에서는 % 연산자를 사용해 10을 0으로 나머지 연산함으로써 DivisionByZeroError를 의도적으로 발생시켜 보겠습니다.
예제 1: 나머지 연산자(%) 사용
<?php
try {
$a = 10;
$b = 0;
$result = $a%$b;
echo $result;
}
catch (DivisionByZeroError $e) {
echo $e->getMessage();
}
?>실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Modulo by zero
다음으로 intdiv() 함수의 두 번째 인수로 0을 전달하면 역시 DivisionByZeroError가 발생합니다.
예제 2: intdiv() 함수 사용
<?php
try {
$a = 10;
$b = 0;
$result = intdiv($a,$b);
echo $result;
}
catch (DivisionByZeroError $e) {
echo $e->getMessage();
}
?>실행 결과
Division by zero
주의: 나누기 연산자(/)는 오류 대신 경고 발생
흥미로운 점은 나누기 연산자(/)의 분모가 0이더라도 DivisionByZeroError가 발생하지 않는다는 것입니다. 대신 경고(warning)가 출력되는데, 그 이유는 이 연산의 결과가 PHP 상수 INF(무한대)로 처리되기 때문입니다.
예제 3: 나누기 연산자(/) 사용
<?php
try {
$a = 10;
$b = 0;
$result = $a/$b;
echo $result;
}
catch (DivisionByZeroError $e) {
echo $e->getMessage();
}
?>실행 결과
PHP Warning: Division by zero in C:\xampp\php\test.php on line 5 INF
정리
PHP에서 0으로 나누는 연산은 상황에 따라 다르게 동작합니다. 나머지 연산자(%)와 intdiv() 함수는 DivisionByZeroError를 발생시키므로 try-catch 블록으로 예외 처리를 해주는 것이 좋습니다. 반면 나누기 연산자(/)는 오류가 아닌 경고만 발생하고 결과값으로 INF를 반환하므로, 코드 작성 시 이러한 차이를 반드시 염두에 두어야 합니다.