더북(TheBook)

GOTO문

PL/SQL 코드 상에서 GOTO문을 만나면 GOTO문이 지정하는 라벨로 제어가 넘어간다. 구구단 출력 프로그램으로 예를 들어 보자.

입력

    DECLARE
       vn_base_num NUMBER := 3;
    BEGIN
       <<third>>
       FOR i IN 1..9
       LOOP
          DBMS_OUTPUT.PUT_LINE (vn_base_num || '*' || i || '= ' || vn_base_num * i);
          IF i = 3 THEN
             GOTO fourth;
          END IF;
       END LOOP;

       <<fourth>>
       vn_base_num := 4;
       FOR i IN 1..9
       LOOP
          DBMS_OUTPUT.PUT_LINE (vn_base_num || '*' || i || '= ' || vn_base_num * i);
       END LOOP;
    END;

결과

    3*1= 3
    3*2= 6
    3*3= 9
    4*1= 4
    4*2= 8
    4*3= 12
    4*4= 16
    4*5= 20
    4*6= 24
    4*7= 28
    4*8= 32
    4*9= 36

첫 번째 FOR문에 <<third>>, 두 번째 FOR문에 <<fourth>>라는 라벨을 붙였다. 그리고 첫 번째 FOR문에서 인덱스 값이 3이면, fourth 라벨로 이동해 3단을 출력하다가 4단을 출력하고 있다.

개발 현장에서는 GOTO문은 잘 사용하지 않는다. 왜냐하면 일반적으로 특정 로직에 맞게 PL/SQL 코드를 순차적으로 작성하는데, 중간중간에 GOTO문을 사용해 제어를 다른 부분으로 넘기면 로직의 일관성을 훼손하기 때문이다. 소스코드가 길어지면 이런 문제가 더 불거져 프로그램 가독성이 극도로 나빠져 버린다.

위에서 예로 든 것처럼 구구단 3단을 출력하다 4단을 출력하는 로직을 짜는 것과 같은 일은 거의 없을 것이다. 보통은 A라는 로직을 처리하다가 특정 조건에 부합할 때 B 로직에 제어권을 넘기기 보다는, A1 로직을 처리하고 A2를 처리하는 식으로 로직의 일관성을 유지하는 것이 좋은 프로그래밍 습관이기 때문이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.