본문 바로가기
프로그래밍/RM-COBOL

[COBOL 기초] 반복문(PERFORM UNTIL)으로 대량 데이터 처리하는 COBOL code 작성법

by 오!쎈세! 2026. 6. 22.
단 한 명의 성적만 계산하고 끝나는 것이 아니라, 조건이 만족할 때까지 대량의 데이터를 계속 회전시키며 연산하는 코볼의 루프(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은 "이 조건이 만족하는 순간 즉시 탈출하겠다" 는 종료 이정표임을 명심해야 한다.