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

[COBOL 기초] 특수 제어문(STRING, EVALUATE)으로 가독성을 높이는 COBOL code 작성법

by 오!쎈세! 2026. 6. 22.
여러 개의 문자열을 하나로 합치거나 쪼개는 문자열 특수 제어문(STRING/UNSTRING)과 타 언어의 Switch-Case 구조처럼 수많은 복합 조건을 깔끔하게 처리하는 다중 조건문(EVALUATE)의 실무 코딩법을 알아본다.
🟪 1. 데이터 정의와 버퍼 공간 설계 (DATA DIVISION)
문자열을 합칠 여유로운 버퍼 공간과 조건 판별에 사용할 등급 변수를 선언함. 대장 격인 01 레벨은 A영역(8칸)에, 하위 변수 05B영역(12칸)에 배치한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  STRING-BUFFERS.
*          -------------------------------------------------------------
*          [문자열 처리 변수] 결합할 각각의 단어와 합쳐진 통문장 버퍼 정의 (B영역)
*          -------------------------------------------------------------
           05  FIRST-WORD  PIC X(05)     VALUE "HELLO".
           05  SECOND-WORD PIC X(05)     VALUE "COBOL".
           05  FULL-TEXT   PIC X(20)     VALUE SPACES.

       01  GRADE-RECORDS.
*          -------------------------------------------------------------
*          [다중 조건 변수] 등급별 분기 처리를 테스트할 점수 변수 정의 (B영역)
*          -------------------------------------------------------------
           05  AVG-SCORE   PIC 9(03)     VALUE 085.
           05  GRADE-OUT   PIC X(01)     VALUE SPACE.
코드를 사용할 때는 주의가 필요합니다.
 

🟩 2. STRING 및 EVALUATE 구문 실행 (PROCEDURE DIVISION)
글자들을 합쳐 문장으로 만들고, 점수대별로 학점을 산출하는 실행 영역임. 문단의 이정표는 A영역(8칸)에 적고, 실질적으로 일하는 제어 명령어들은 무조건 B영역(12칸) 안쪽에서 코딩해야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
       PROCEDURE DIVISION.
       MAIN-LOGIC SECTION.
       A000-START.
           DISPLAY "--- SPECIAL CONTROL TEST START ---".

*          -------------------------------------------------------------
*          [1. STRING 제어문] 여러 단어를 공백이나 지정 기호 기준으로 합침
*          -------------------------------------------------------------
           STRING FIRST-WORD  DELIMITED BY SIZE
                  " "         DELIMITED BY SIZE
                  SECOND-WORD DELIMITED BY SIZE
                  INTO FULL-TEXT
           END-STRING.
*          -> DELIMITED BY SIZE: 해당 변수의 전체 크기만큼 가져와 결합하겠다는 뜻임.
           DISPLAY "STRING 결합 결과 데이터: " FULL-TEXT.

*          -------------------------------------------------------------
*          [2. EVALUATE 제어문] 복잡한 IF~ELSE 중첩을 해결하는 다중 조건문
*          -------------------------------------------------------------
           EVALUATE AVG-SCORE
               WHEN 90 THRU 100
                   MOVE "A" TO GRADE-OUT
               WHEN 80 THRU 89
                   MOVE "B" TO GRADE-OUT
               WHEN 70 THRU 79
                   MOVE "C" TO GRADE-OUT
               WHEN OTHER
                   MOVE "F" TO GRADE-OUT
           END-EVALUATE.
*          -> THRU 기워드는 특정 범위를 지정할 때 사용함 (예: 90점부터 100점까지).
*          -> 그 외 나머지 조건은 WHEN OTHER를 사용하여 예외 처리를 수행함.
           DISPLAY "EVALUATE 학점 결과 데이터: " GRADE-OUT.

           STOP RUN.
코드를 사용할 때는 주의가 필요합니다.
 

💡 [실무 팁] 중첩 IF문을 청소하는 EVALUATE의 강력함
코볼 실무에서 조건이 5~10개 이상 늘어날 때 IF ~ ELSE문을 계속 중첩해서 코딩하면, 가독성이 극도로 떨어지고 칼럼 자릿수가 부족해지는 현상이 발생함.
  • 지옥의 중첩 IF 구조 (가독성 최악)
    cobol code
               IF SCORE >= 90
                   MOVE "A" TO GRADE
               ELSE
                   IF SCORE >= 80
                       MOVE "B" TO GRADE
                   ELSE
                       IF SCORE >= 70
                           ... (오른쪽으로 점점 밀려나며 72칸 한계를 초과함)
    
    코드를 사용할 때는 주의가 필요합니다.
     
  • EVALUATE를 통한 혁신 (가독성 최고)
    • EVALUATE 구문은 모든 조건을 동일한 세로 정렬 선상에 깔끔하게 배치할 수 있어 가독성을 해치지 않음.
    • 또한 문자열, 숫자, 복합 조건식(WHEN AVG-SCORE >= 60 AND AGE >= 20)까지 유연하게 판단할 수 있기 때문에 현업 COBOL code 구조 설계 시 중첩 IF문보다 사용을 적극 권장하는 핵심 특수 제어문이다.