여러 개의 문자열을 하나로 합치거나 쪼개는 문자열 특수 제어문(STRING/UNSTRING)과 타 언어의 Switch-Case 구조처럼 수많은 복합 조건을 깔끔하게 처리하는 다중 조건문(EVALUATE)의 실무 코딩법을 알아본다.
🟪 1. 데이터 정의와 버퍼 공간 설계 (DATA DIVISION)
문자열을 합칠 여유로운 버퍼 공간과 조건 판별에 사용할 등급 변수를 선언함. 대장 격인 01 레벨은 A영역(8칸)에, 하위 변수 05는 B영역(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문보다 사용을 적극 권장하는 핵심 특수 제어문이다.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 알고리즘 1편: 1에서 100까지 합 구하기 기본 COBOL code (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 종합 프로젝트: 실전 성적 시스템 구축으로 마스터하는 COBOL code (0) | 2026.06.22 |
| [COBOL 기초] 서브 프로그램 호출(CALL ~ USING)과 데이터 연동 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 대량 데이터 정렬(SORT)과 병합(MERGE) 처리를 위한 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |