단 한 명의 성적만 계산하고 끝나는 것이 아니라, 조건이 만족할 때까지 대량의 데이터를 계속 회전시키며 연산하는 코볼의 루프(Loop) 제어 구문을 알아본다.
🟪 1. 루프 카운터 및 데이터 테이블 정의 (DATA DIVISION)
여러 번 반복하기 위해 현재 몇 번째 데이터인지 세어줄 카운터 변수(PIC 9)와 연속된 가상 데이터를 담을 변수 구조를 선언해 준다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SYSTEM-COUNTERS.
* -------------------------------------------------------------
* [반복 제어 변수] 루프 횟수를 카운트할 숫자형 변수 선언 (B영역 시작)
* -------------------------------------------------------------
05 LOOP-IDX PIC 9(02) VALUE 1.
05 MAX-LIMIT PIC 9(02) VALUE 3.
01 SCORE-RECORDS.
* [시뮬레이션 데이터] 테스트용 국영수 점수를 고정값으로 세팅함
05 KOR-SCORE PIC 9(03) VALUE 090.
05 ENG-SCORE PIC 9(03) VALUE 085.
05 MAT-SCORE PIC 9(03) VALUE 095.
05 TOTAL-SUM PIC 9(04) VALUE ZERO.
05 AVG-RESULT PIC 9(03)V99 VALUE ZERO.
01 PRINT-RECORDS.
05 AVG-PRINT PIC ZZ9.99.
🟩 2. PERFORM UNTIL을 활용한 루프 실행 (PROCEDURE DIVISION)
지정한 조건이 만족할 때까지 특정 구역을 반복해서 호출 및 실행하는 영역임. PERFORM문과 짝꿍인 END-PERFORM 제어 기호 역시 무조건 B영역(12칸) 안쪽에서 정렬하여 코딩해야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
DISPLAY "--- BATCH PROCESS START ---".
* -------------------------------------------------------------
* [COBOL code 반복문] LOOP-IDX가 MAX-LIMIT보다 커질 때까지 도는 루프
* -------------------------------------------------------------
PERFORM UNTIL LOOP-IDX > MAX-LIMIT
DISPLAY "CURRENT STUDENT NO: " LOOP-IDX
* [연산 및 출력 로직 작동] 이전 편에서 구현한 성적 계산식 수행
COMPUTE TOTAL-SUM = KOR-SCORE + ENG-SCORE + MAT-SCORE
COMPUTE AVG-RESULT = TOTAL-SUM / 3
MOVE AVG-RESULT TO AVG-PRINT
DISPLAY "AVERAGE VALUE : " AVG-PRINT
* ---------------------------------------------------------
* [카운터 증감 연산] 무한 루프에 빠지지 않도록 인덱스를 1씩 더함
* ---------------------------------------------------------
ADD 1 TO LOOP-IDX
END-PERFORM.
* -> 코볼은 타 언어의 WHILE문과 달리, '조건이 참이 될 때까지' 반복함.
DISPLAY "--- BATCH PROCESS END ---".
STOP RUN.
💡 [실무 팁] PERFORM UNTIL 탈출 조건의 반대 개념 이해하기
타 현대 언어(C, Java)의 while문 인터프리터 방식에 익숙한 개발자들이 코볼의 반복문을 쓸 때 가장 많이 하는 실수임.
- 타 언어의 루프 방식 (While)
- while (idx <= 3) -> 즉, 조건이 참(True)인 동안 계속해서 내부 코드를 실행함.
- 코볼의 루프 방식 (PERFORM UNTIL)
- PERFORM UNTIL LOOP-IDX > MAX-LIMIT -> 즉, 해당 탈출 조건이 참(True)이 될 때까지(그전까지는 거짓일 동안) 루프를 돌림.
- 주의점
- 조건을 거꾸로 생각해서 UNTIL LOOP-IDX <= 3 으로 적어버리면, 첫 시작부터 인덱스가 1이라 조건이 참이 되므로 반복문 내부를 단 한 번도 실행하지 않고 바로 통과해 버림.
- 코볼의 UNTIL은 "이 조건이 만족하는 순간 즉시 탈출하겠다" 는 종료 이정표임을 명심해야 한다.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 조건문(IF ~ END-IF)으로 합격/불합격 판별하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 소수점 편집 마스크(PIC Z, .)와 COBOL code 변환 출력법 (0) | 2026.06.22 |
| [COBOL 기초] 국영수 총점/평균 프로그램 실습: PIC 999와 9(03) 완벽 비교 (0) | 2026.06.22 |