제어문(Control Statements)은 프로그램의 실행 흐름을 조작하고 제어하는 데 사용되는 문장들을 의미합니다. COBOL 프로그래밍에서 제어문은 프로그램의 논리적인 분기, 조건 처리, 반복 등을 가능하게 하며, 프로그램의 실행 흐름을 결정하는 중요한 요소입니다.
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_CONTROL_STATEMENTS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 18.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
*> GO TO 문: 실행 분기
IF AGE LESS THAN 20
DISPLAY 'Age is less than 20. Jumping to label YOUNG.'.
GO TO YOUNG.
END-IF.
DISPLAY 'Age is 20 or more. Continuing execution...'.
YOUNG.
DISPLAY 'Inside YOUNG label block. Age is less than 20.'.
*> IF 문: 조건 처리
IF AGE GREATER THAN 10
DISPLAY 'Age is greater than 10.'.
ELSE
DISPLAY 'Age is not greater than 10.'.
END-IF.
*> PERFORM 문: 프로시저 실행
PERFORM DISPLAY_AGE 3 TIMES.
*> CALL 문: 다른 프로그램 실행
CALL 'ANOTHER-PROGRAM'.
STOP RUN.
DISPLAY_AGE.
DISPLAY 'Current age: ' AGE.
ANOTHER-PROGRAM.
DISPLAY 'Executing ANOTHER-PROGRAM...'.
STOP RUN.
****** 결과 *******
Starting program execution...
Age is less than 20. Jumping to label YOUNG.
Inside YOUNG label block. Age is less than 20.
Age is greater than 10.
Current age: 18
Current age: 18
Current age: 18
Executing ANOTHER-PROGRAM...
******************
GO TO 문은 프로그램의 특정 레이블로 실행을 분기시킵니다. 이는 프로그램 흐름을 끊어내기 때문에 사용을 권장하지 않습니다.
STOP 문은 프로그램을 정지하거나 종료합니다. STOP RUN은 프로그램 실행을 정상적으로 종료하며, STOP은 실행을 중단합니다.
- GO TO 프로시저
- 프로그램의 실행을 무조건 지정한 프로시저로 이동/분기(Branch)시킨다.
- GO TO 프로시저1, 프로시저2 .. 프로시저n DEPENDING ON 기억장소
- 메모리 값에 따라 서로 다른 처리를 수행할 때 사용됨.
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_GO_TO_DEPENDING_ON.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CHOICE PIC 9 VALUE 2. *> CHOICE 변수 선언 및 초기화
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
GO TO DEPENDING-ON-CHOICE. *> DEPENDING-ON-CHOICE 레이블로 이동
DEPENDING-ON-CHOICE.
DISPLAY 'Inside DEPENDING-ON-CHOICE label block.'.
*> GO TO DEPENDING ON 문: 조건에 따른 분기
GO TO LABEL-1 DEPENDING ON CHOICE
LABEL-2
LABEL-3.
LABEL-1.
DISPLAY 'Inside LABEL-1 block. Choice: 1.'.
GO TO END-PROGRAM. *> 프로그램 종료로 분기
LABEL-2.
DISPLAY 'Inside LABEL-2 block. Choice: 2.'.
GO TO END-PROGRAM. *> 프로그램 종료로 분기
LABEL-3.
DISPLAY 'Inside LABEL-3 block. Choice: 3.'.
END-PROGRAM.
DISPLAY 'Program execution completed.'.
STOP RUN.
******* 결과 ********
Starting program execution...
Inside DEPENDING-ON-CHOICE label block.
Inside LABEL-2 block. Choice: 2.
Program execution completed.
********************
01 CHOICE PIC 9 VALUE 2.
DEPENDING-ON-CHOICE.
GO TO OPTION-1 DEPENDING ON CHOICE
OPTION-2
OPTION-3.
OPTION-1.
DISPLAY 'Inside OPTION-1 block. Choice: 1.'.
GO TO END-PROGRAM.
OPTION-2.
DISPLAY 'Inside OPTION-2 block. Choice: 2.'.
GO TO END-PROGRAM.
OPTION-3.
DISPLAY 'Inside OPTION-3 block. Choice: 3.'.
END-PROGRAM.
DISPLAY 'Program execution completed.'.
STOP RUN.
- ALTER 프로시저1 TO [PROCEED TO] 프로시저2.
- 명칭 프로시저1을 프로시저2로 재설정. GO TO 문과 함께 사용.
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_ALTER_PROCEDURE.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
PERFORM ORIGINAL-PROCEDURE.
DISPLAY 'Continuing program execution...'.
STOP RUN.
ORIGINAL-PROCEDURE.
DISPLAY 'Inside ORIGINAL-PROCEDURE.'.
GO TO ALTERED-PROCEDURE.
ALTERED-PROCEDURE.
DISPLAY 'Inside ALTERED-PROCEDURE.'.
*> ALTER 문: 프로시저명 변경
ALTER ORIGINAL-PROCEDURE TO PROCEDURE-AFTER-ALTER.
PROCEDURE-AFTER-ALTER.
DISPLAY 'Inside PROCEDURE-AFTER-ALTER.'.
END-PROGRAM.
DISPLAY 'Program execution completed.'.
IF 문은 조건을 평가하고, 조건이 참일 경우에만 특정한 코드 블록을 실행합니다. IF ... ELSE ... END-IF 구문을 사용하여 조건에 따라 두 가지 다른 실행 경로를 만들 수 있습니다.
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_IF_STATEMENT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 25.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
*> IF 문: 조건에 따른 실행 경로 결정
IF AGE LESS THAN 20
DISPLAY 'Age is less than 20.'.
ELSE
DISPLAY 'Age is 20 or more.'.
END-IF.
DISPLAY 'Continuing program execution...'.
STOP RUN.
****** 결과 ******
Starting program execution...
Age is 20 or more.
Continuing program execution...
*****************
COBOL의 PERFORM 문은 프로그램 내에서 특정한 작업 단위나 프로시저를 반복적으로 실행하는 제어문입니다. 이를 통해 코드의 재사용성을 높이고 반복적인 작업을 간단하게 처리할 수 있습니다.
[구조]
PERFORM procedure-name [UNTIL condition]
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_PERFORM_STATEMENT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 99 VALUE 1.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
*> PERFORM 문: 프로시저를 반복적으로 실행
PERFORM DISPLAY-COUNTER UNTIL COUNTER GREATER THAN 5.
DISPLAY 'Continuing program execution...'.
STOP RUN.
DISPLAY-COUNTER.
DISPLAY 'Counter value: ' COUNTER.
ADD 1 TO COUNTER.
******* 결과 *******
Starting program execution...
Counter value: 1
Counter value: 2
Counter value: 3
Counter value: 4
Counter value: 5
Continuing program execution...
********************
//이 예시에서는 DISPLAY-COUNTER 프로시저가
//PERFORM 문을 통해 1부터 5까지의 값을 출력하며 반복 실행
- 메서드(서브루틴)는 프로그램의 일부를 모듈화하고 재사용성을 높이기 위한 코드 블록을 나타내며, CALL을 사용하여 호출할 수 있습니다.
- 반면에 PERFORM PROCEDURE는 서브루틴을 호출하고 실행하는 데 사용되는 특별한 COBOL 키워드입니다.
CALL은 일반적인 서브루틴 호출에 사용되며, 호출된 서브루틴이 실행을 완료한 후에 호출한 곳으로 돌아옵니다. 반면에 PERFORM은 반복 작업이나 루프를 수행하는 데 사용되며, 호출된 서브루틴이 실행 중에는 호출한 곳으로 돌아가지 않습니다.
CALL은 COBOL에서 서브루틴을 호출하는 키워드입니다.
CALL을 사용하여 다른 프로시저(서브루틴)를 호출하면, 호출된 서브루틴이 실행을 완료한 후에 호출한 곳으로 돌아옵니다.
호출한 곳에서는 CALL 이후의 코드가 실행됩니다.
IDENTIFICATION DIVISION.
PROGRAM-ID. MYPROGRAM.
PROCEDURE DIVISION.
CALL MY-SUBROUTINE.
DISPLAY 'Back in main program after calling MY-SUBROUTINE.'.
STOP RUN.
MY-SUBROUTINE.
DISPLAY 'Inside MY-SUBROUTINE.'.
.
PERFORM은 COBOL에서도 서브루틴을 호출하는 데 사용되지만, 일반적으로 반복적인 작업을 수행하기 위해 사용됩니다.
PERFORM을 사용하여 서브루틴을 호출하면, 호출된 서브루틴이 실행 중에는 호출한 곳으로 돌아가지 않습니다. 서브루틴 실행이 끝날 때까지 제어가 넘어가지 않습니다.
PERFORM을 사용하여 반복 작업이나 특정 프로시저를 실행하면, 해당 프로시저가 모두 실행될 때까지 루프를 돕니다.
IDENTIFICATION DIVISION.
PROGRAM-ID. MYPROGRAM.
PROCEDURE DIVISION.
PERFORM 3 TIMES
DISPLAY 'Inside PERFORM loop.'.
DISPLAY 'Loop finished.'.
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. MYPROGRAM.
PROCEDURE DIVISION.
CALL MY-SUBROUTINE.
DISPLAY 'Program execution completed.'.
STOP RUN.
MY-SUBROUTINE.
DISPLAY 'Inside MY-SUBROUTINE.'.
.
IDENTIFICATION DIVISION.
PROGRAM-ID. MYPROGRAM.
PROCEDURE DIVISION.
PERFORM MY-SUBROUTINE.
DISPLAY 'Program execution completed.'.
STOP RUN.
MY-SUBROUTINE.
DISPLAY 'Inside MY-SUBROUTINE.'.
.
COBOL의 CALL 문은 다른 프로그램을 실행하거나 서브루틴을 호출하는 데 사용되는 제어문입니다. 이를 통해 여러 개의 프로그램이나 서브루틴 간에 상호작용할 수 있습니다. CALL 문은 주로 다른 COBOL 프로그램을 호출하거나, 외부 서브루틴을 실행하는데 사용됩니다.
[구조]
CALL program-name [USING data-items]
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_CALL_STATEMENT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VALUE-A PIC 9 VALUE 10.
01 VALUE-B PIC 9 VALUE 5.
01 RESULT PIC 9.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Starting program execution...'.
*> CALL 문: 다른 프로그램 호출
CALL 'CALCULATION-PROGRAM' USING VALUE-A VALUE-B GIVING RESULT.
DISPLAY 'Result: ' RESULT.
DISPLAY 'Continuing program execution...'.
STOP RUN.
******* 결과 *******
Starting program execution...
Result: 15
Continuing program execution...
*******************
//이 예시에서는 'CALCULATION-PROGRAM'이라는
//다른 프로그램을 CALL 문으로 호출하고,
//USING 절을 사용하여 VALUE-A와 VALUE-B 값을 전달.
//호출된 프로그램은 전달받은 값을 더한 결과를 GIVING 절을 통해
//RESULT 변수에 저장하고, 결과를 출력.