개요
goto 문은 프로그램의 실행 흐름을 코드 내 특정 위치로 이동시키는 데 사용되는 제어문입니다. 이동할 위치는 사용자가 직접 정의한 레이블(label)로 지정합니다. 일반적으로 goto 문은 if, else 또는 switch 구문의 case처럼 조건 표현식의 일부로 스크립트에 포함되어 사용됩니다.
기본 문법
statement1;
statement2;
if (expression)
goto label1;
statement3;
label1: statement4;위 코드에서 statement2가 실행된 후, if 문의 표현식이 true이면 프로그램의 흐름은 label1로 이동하여 statement4를 실행합니다. 반대로 표현식이 false이면 statement3가 정상적으로 실행된 후 다음 코드로 진행됩니다.
예제: 짝수 판별하기
다음 예제에서는 사용자가 입력한 숫자가 짝수일 경우 지정된 레이블로 프로그램이 점프합니다.
<?php
$x=(int)readline("enter a number");
if ($x%2==0)
goto abc;
echo "x is an odd number";
return;
abc:
echo "x is an even number";
?>실행 결과
입력값이 짝수라면 아래와 같은 결과가 출력됩니다.
x is an even number
goto 문으로 반복문 만들기
goto 키워드 앞에 있는 레이블은 현재 문장보다 앞쪽에 위치할 수도 있고 뒤쪽에 위치할 수도 있습니다. 만약 goto 문이 참조하는 레이블이 더 앞선 문장을 가리킨다면, 그것은 하나의 반복문(loop)을 구성하게 됩니다.
다음 예제는 goto 문으로 만든 간단한 루프를 보여줍니다.
<?php
$x=0;
start:
$x++;
echo "x=$x\n";
if ($x<5)
goto start;
?>실행 결과
$x 값이 5보다 작은 동안 계속 start 레이블로 되돌아가며, 아래와 같은 결과가 출력됩니다.
x=1 x=2 x=3 x=4 x=5
주의사항: 반복문 중간으로의 점프 금지
goto 문을 사용하면 프로그램 제어를 이름이 지정된 임의의 위치로 점프시킬 수 있습니다. 하지만 반복문(for, while 등)이나 switch 문의 중간으로 점프하는 것은 허용되지 않습니다.
다음 예제처럼 반복문 내부에 있는 레이블로 점프하려고 하면 치명적인 오류(fatal error)가 발생합니다.
<?php
for ($x=1; $x<=5; $x++){
if (x==3)
goto inloop;
for ($y=1;$y<=5; $y++){
inloop:
echo "x=$x y=$y\n";
}
}
?>실행 결과
반복문 안으로 점프하려 할 경우 PHP는 다음과 같은 오류 메시지를 출력합니다.
PHP Fatal error: 'goto' into loop or switch statement is disallowed in line 5
마무리
goto 문은 코드 흐름을 자유롭게 이동시킬 수 있는 강력한 기능이지만, 남용하면 코드의 가독성과 유지보수성이 크게 떨어질 수 있습니다. 실무에서는 가능한 한 함수 호출, break, continue 같은 구조화된 제어문을 우선적으로 사용하고, goto 문은 꼭 필요한 경우에만 신중하게 활용하는 것이 좋습니다.