Devin.KR

COBOL 과 일괄 처리 - 네 개의 DIVISION

개발자KR 조회 0

이 장에서 배우는 것

작은 신용협동조합은 하루 동안 회원의 예금 계좌에서 일어난 입금과 출금을 모아 업무 마감 뒤에 처리한다. 창구에서 거래가 접수되는 순간과, 모인 거래를 한꺼번에 정리하는 순간은 서로 다르다. 이 책은 그중 모인 거래를 처리하는 프로그램을 만들어 간다. 첫 출발은 계좌 잔액을 계산하는 일이 아니라, 프로그램의 모양을 갖추고 정해진 안내를 화면에 출력한 뒤 끝내는 일이다.

COBOL은 업무 데이터를 처리하기 위해 만들어진 프로그래밍 언어다. 프로그램은 컴퓨터가 수행할 일을 적은 문서이며, 프로그래밍 언어는 그 일을 일정한 규칙으로 표현하는 수단이다. 이 장에서는 COBOL 소스 파일을 작성하고 실행 파일로 바꾸는 과정까지 직접 따라간다. 소스 파일은 사람이 작성한 프로그램 문장이 들어 있는 파일이고, 실행 파일은 운영체제가 실행할 수 있도록 변환된 파일이다.

  • 은행·보험·공공 기관의 업무에서 COBOL이 사용되는 이유를 설명한다.
  • 일일 거래를 모아서 처리하는 일괄 처리의 흐름을 이해한다.
  • 네 개의 DIVISION이 맡는 역할을 구별한다.
  • 고정 형식의 열 위치를 지켜 main.cob를 작성한다.
  • cobc로 컴파일하고 DISPLAY의 출력 결과를 확인한다.

문제 상황

신용협동조합의 업무 담당자는 하루가 끝나면 접수된 거래를 정리한다. 예를 들어 오전에 접수한 입금, 오후에 접수한 출금, 마감 직전에 접수한 입금이 각각 거래 자료로 남는다. 업무 담당자는 이 자료를 이용해 회원별 예금 잔액을 갱신하고, 처리 결과를 확인할 자료를 얻어야 한다. 한 번의 거래만 성공했다고 해서 하루 전체의 처리가 끝난 것은 아니다.

프로그램을 처음 만드는 사람에게 이 업무를 한꺼번에 맡기면 무엇부터 확인해야 하는지 흐려진다. 입력 자료를 읽지 못한 것인지, 계산이 잘못된 것인지, 프로그램이 시작조차 하지 못한 것인지 구별하기 어렵기 때문이다. 따라서 먼저 실행 여부를 확인할 수 있는 작은 출발점을 만든다. 이번 프로그램은 업무 이름과 예정된 처리 순서를 출력하고 정상적으로 종료한다.

출력할 순서는 거래 읽기, 잔액 갱신, 결과 쓰기다. 다만 이 장의 코드는 그 일을 수행하지 않는다. 화면에 나오는 PLAN은 앞으로 구현할 작업이라는 뜻이다. 실제 거래 자료도 계좌 자료도 아직 사용하지 않는다. 이 구분을 해 두어야 안내 문구가 나타난 사실을 거래 처리가 완료된 사실로 받아들이지 않는다.

업무 담당자는 이 프로그램을 실행했을 때 첫 줄에서 어떤 업무가 시작되었는지 확인하고, 가운데 줄에서 예정된 순서를 읽고, 마지막 줄에서 안내 프로그램이 끝났음을 확인한다. 실행할 때마다 같은 다섯 줄이 같은 순서로 나타나야 한다. 키보드로 값을 입력하지 않으므로 실행 도중 사람의 응답을 기다리는 일도 없다.

COBOL과 일괄 처리

COBOL이라는 이름은 Common Business-Oriented Language에서 왔다. 이름에 담긴 업무 지향이라는 성격은 회원 번호, 계약 정보, 지급 내역, 금액처럼 정해진 구조를 가진 자료를 처리하는 데서 드러난다. 은행의 계좌 업무, 보험사의 계약·보험금 업무, 공공 기관의 행정 업무 등에는 오랜 기간 운영해 온 COBOL 프로그램이 남아 있으며, 지금도 유지보수와 변경의 대상이 된다.

이러한 프로그램이 쓰이는 환경 가운데 하나가 메인프레임(mainframe)이다. 메인프레임은 많은 업무와 데이터를 안정적으로 처리하도록 구성한 대형 컴퓨터 시스템이다. COBOL을 메인프레임에서만 실행할 수 있는 것은 아니다. 이 책에서는 macOS 또는 Linux에서 GnuCOBOL 3.2를 이용한다. GnuCOBOL은 COBOL 소스를 컴파일할 수 있는 도구를 제공하며, 여기서는 cobc라는 명령을 사용한다.

기존 업무 프로그램은 문장만으로 이루어진 것이 아니다. 어떤 자료를 받는지, 언제 처리하는지, 어떤 결과를 남기는지에 대한 업무 규칙과 함께 운영된다. 따라서 COBOL을 배울 때는 문법을 읽는 능력과 데이터 처리의 흐름을 읽는 능력을 함께 기르는 편이 좋다. 이 책이 예금 계좌와 일일 거래를 이어지는 예제로 사용하는 이유도 여기에 있다.

일괄 처리(batch processing)는 일정한 기준으로 모아 둔 자료를 하나의 처리 작업으로 실행하는 방식이다. 하루 동안 들어온 거래를 업무 마감 뒤에 처리하는 것이 한 예다. 자료를 모으는 기준은 시간일 수도 있고, 처리 대상의 종류일 수도 있다. 일괄 처리가 반드시 밤에만 실행되는 것은 아니며, 많은 자료가 있어야만 일괄 처리가 되는 것도 아니다.

한 번 실행한 프로그램은 정해진 처리 순서에 따라 입력 자료를 다루고 결과를 남긴다. 처리 중 매 거래마다 사람이 키보드로 답을 입력해야 한다면 자동으로 이어지는 업무 흐름을 만들기 어렵다. 이 책의 예제는 표준 입력, 즉 프로그램이 보통 키보드 입력을 받는 통로를 사용하지 않는다. 입력 자료가 필요한 시점에는 파일을 통해 준비한다.

일괄 처리는 모아 둔 일일 거래를 한 번의 작업으로 처리하고 결과를 남긴다

그림에서 거래 자료는 처리 작업의 입력이고, 처리 결과는 출력이다. 입력은 프로그램이 받아들이는 자료이고, 출력은 프로그램이 밖으로 내보내는 자료다. 이 장에서는 그 흐름을 구현하기 전에 화면 출력만 확인한다. 화면 출력도 출력의 한 종류이지만, 계좌 자료를 저장하거나 업무 보고서를 작성하는 것과는 목적이 다르다.

일괄 처리 업무와 이번 프로그램의 범위
업무 요소완성할 업무의 역할이번 장에서 하는 일
입력하루 동안 모인 거래를 받는다거래 읽기가 예정되어 있음을 출력한다
처리거래에 따라 계좌 잔액을 바꾼다잔액 갱신이 예정되어 있음을 출력한다
출력처리 결과를 남긴다결과 쓰기가 예정되어 있음을 출력한다
종료한 번의 작업 실행을 끝낸다마지막 안내를 출력하고 실행을 끝낸다

네 개의 DIVISION으로 프로그램을 나눈다

COBOL 프로그램은 역할이 다른 부분을 DIVISION이라는 큰 구역으로 나눈다. 여기서는 이름을 붙이는 구역, 실행 환경을 설명하는 구역, 데이터를 정의하는 구역, 수행할 일을 적는 구역의 순서로 작성한다. 이 순서는 프로그램을 읽는 사람에게도 안내가 된다. 이름을 확인한 다음 필요한 환경과 자료를 살피고, 마지막으로 실제 동작을 읽는다.

IDENTIFICATION DIVISION은 프로그램을 식별하는 구역이다. PROGRAM-ID. MAIN.은 이 프로그램의 이름이 MAIN임을 나타낸다. 파일 이름 main.cob는 운영체제에서 파일을 찾을 때 사용하는 이름이고, MAIN은 소스 안에 선언한 프로그램 이름이다. 두 이름은 서로 다른 역할을 하지만 이 책에서는 알아보기 쉽도록 맞추어 사용한다.

ENVIRONMENT DIVISION은 프로그램이 사용하는 외부 환경을 설명하는 구역이다. 파일을 사용하는 프로그램에서는 파일 연결에 관한 내용 등이 들어간다. 이번 프로그램은 파일을 사용하지 않으므로 이 구역의 제목만 적는다. 화면에 안내를 출력하기 위해 여기에서 파일을 선언할 필요는 없다.

DATA DIVISION은 프로그램이 다룰 데이터를 정의하는 구역이다. 이번 코드에는 저장해 두고 바꾸어 사용할 데이터 항목이 없다. 출력할 글을 DISPLAY 문장 안에 직접 적으므로 이 구역도 제목만 둔다. 빈 구역이 있다는 사실은 오류가 아니다. 이 예제에서는 네 구역의 위치를 익히기 위해 사용하지 않는 두 구역의 제목도 명시한다.

PROCEDURE DIVISION은 프로그램이 수행할 문장을 적는 구역이다. 이번 프로그램에서는 위에서 아래로 DISPLAY를 실행한 뒤 STOP RUN을 실행한다. DISPLAY는 지정한 내용을 화면에 출력하는 명령이다. STOP RUN은 이번처럼 단독으로 실행하는 프로그램의 실행을 끝낸다. 프로그램의 역할을 설명하는 제목들과 실제 동작을 지시하는 문장을 구별하며 읽는다.

네 개의 DIVISION이 답하는 질문
구역답하는 질문이번 코드의 내용
IDENTIFICATION DIVISION이 프로그램의 이름은 무엇인가PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION어떤 외부 환경을 사용하는가구역 제목만 둔다
DATA DIVISION어떤 데이터를 정의하는가구역 제목만 둔다
PROCEDURE DIVISION어떤 순서로 실행하는가안내 출력과 종료를 적는다

따옴표로 둘러싼 글은 문자열 리터럴(string literal)이라고 한다. 이는 소스에 직접 적어 둔 문자열 값이다. DISPLAY "DAILY DEPOSIT BATCH"는 따옴표 안의 글을 출력한다. 따옴표 자체는 출력하지 않는다. 이 장에서는 영어 안내를 사용해 소스의 열 위치와 실행 결과를 쉽게 대조한다. 출력 내용의 뜻은 일일 예금 일괄 처리, 예정된 작업, 안내 종료다.

COBOL의 예약어는 언어가 정해 둔 뜻으로 사용하는 단어다. DISPLAY와 DIVISION 등이 이에 해당한다. 이 책에서는 예약어를 대문자로 적는다. 문자열 안의 글은 출력할 내용이므로 대소문자와 띄어쓰기까지 결과에 영향을 준다. 예약어를 읽는 일과 따옴표 안의 안내를 읽는 일은 구별해야 한다.

고정 형식과 컴파일

이 장은 고정 형식(fixed format)으로 소스를 작성한다. 고정 형식에서는 한 줄의 어느 열에 글자가 있는지가 의미를 가진다. 열은 왼쪽에서부터 센 글자 위치다. 첫 번째 위치가 1열이고, 그다음이 2열이다. 눈으로 들여쓰기가 비슷해 보이는 것만으로는 충분하지 않다. 정해진 시작 위치를 지켜야 한다.

1~6열은 일련번호 영역이다. 이 장에서는 번호를 넣지 않고 공백으로 둔다. 7열은 표시 영역이다. 보통의 소스 줄에서는 공백으로 두며, 별표를 놓으면 그 줄을 주석으로 사용할 수 있다. 주석은 사람이 읽기 위한 설명으로, 실행할 명령이 아니다. 8~11열은 A 영역이고, 12~72열은 B 영역이다. DIVISION 제목과 PROGRAM-ID는 A 영역에서 시작하고, 이 예제의 실행 문장은 B 영역에서 시작한다.

고정 형식에서는 구역 제목을 8열에서 시작하고 실행 문장을 12열에서 시작한다
이번 소스에서 지킬 고정 형식의 열 구분
열영역이번 장의 작성 규칙
1~6일련번호 영역공백 여섯 개를 둔다
7표시 영역보통 줄은 공백, 주석 줄은 별표를 둔다
8~11A 영역구역 제목과 PROGRAM-ID를 8열에서 시작한다
12~72B 영역DISPLAY와 STOP RUN을 12열에서 시작한다

따라서 8열에서 시작하는 줄의 앞에는 공백이 일곱 개 있고, 12열에서 시작하는 줄의 앞에는 공백이 열한 개 있다. 탭은 편집기 설정에 따라 화면에서 차지하는 폭이 달라질 수 있으므로 사용하지 않는다. 편집기가 들여쓰기에 공백을 넣도록 설정하고, 가능하면 열 번호를 확인한다. 이번 코드의 소스 영역은 모두 72열 안에서 끝난다.

고정 형식의 소스 영역 뒤에 중요한 글을 붙이지 않는다. 기본 설정에서는 72열 뒤의 내용이 프로그램 문장으로 취급되지 않을 수 있다. 특히 닫는 따옴표나 문장 끝의 마침표가 그 위치를 넘어가면 의도한 코드가 전달되지 않는다. 이 장의 출력 문장은 짧게 작성하여 줄을 이어 쓰는 규칙 없이도 읽을 수 있게 한다.

컴파일(compile)은 소스를 검사하고 실행 가능한 형태로 변환하는 과정이다. 터미널은 운영체제에 명령을 입력하는 창이다. main.cob를 저장한 폴더에서 터미널을 열고 cobc -x -Wall main.cob를 실행한다. -x는 실행 파일을 만들도록 지정하는 옵션이며, -Wall은 여러 경고를 표시하도록 하는 옵션이다. 옵션은 명령의 동작을 선택하는 부가 지정이다.

소스가 올바르면 이 명령은 실행 파일 main을 만든다. 컴파일이 성공했다고 해서 업무 프로그램이 실행된 것은 아니다. ./main이라는 별도 명령으로 실행해야 한다. 여기서 ./는 현재 폴더에 있는 파일을 가리킨다. 이 예제는 macOS와 Linux에서 GnuCOBOL 3.2의 cobc가 이미 사용할 수 있게 설치된 환경을 전제로 한다.

완성 코드

아래 내용을 main.cob라는 이름으로 저장한다. 줄 앞의 공백을 유지한다. 코드에는 줄 번호를 붙이지 않는다. 숫자를 덧붙이면 그 숫자가 소스 파일의 일부가 되어 원래 의도와 다른 위치에 놓일 수 있다. 입력 파일이나 추가 소스 파일은 필요하지 않다.

main.cob

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       PROCEDURE DIVISION.
           DISPLAY "DAILY DEPOSIT BATCH"
           DISPLAY "PLAN 1: READ DAILY TRANSACTIONS"
           DISPLAY "PLAN 2: UPDATE ACCOUNT BALANCES"
           DISPLAY "PLAN 3: WRITE PROCESSING RESULTS"
           DISPLAY "PREVIEW ENDED"
           STOP RUN.

이 프로그램은 다섯 번 출력한 뒤 실행을 끝낸다. 각 DISPLAY는 별도의 줄을 출력한다. DISPLAY 뒤에 붙인 글은 프로그램의 안내이며, READ나 UPDATE라는 영어가 그 안에 있다고 해서 파일 읽기나 잔액 갱신이 실행되지는 않는다. 따옴표 안의 전체 내용은 출력할 문자열 값으로 취급된다.

줄별 해설

첫째 줄의 IDENTIFICATION DIVISION.은 식별 구역을 시작한다. 둘째 줄의 PROGRAM-ID. MAIN.은 프로그램 이름을 선언한다. PROGRAM-ID 뒤의 마침표와 MAIN 뒤의 마침표는 모두 코드에 포함한다. 화면에 MAIN이라는 글을 출력하는 줄은 아니다.

셋째 줄의 ENVIRONMENT DIVISION.은 환경 구역을 시작한다. 바로 다음 구역이 이어지므로 이 구역에 추가로 적은 내용은 없다. 넷째 줄의 DATA DIVISION.도 같은 방식으로 데이터 구역의 위치만 나타낸다. 이번 프로그램에는 입력 파일과 별도로 정의한 데이터 항목이 없다는 사실이 코드 구조에 드러난다.

다섯째 줄의 PROCEDURE DIVISION.부터 실행할 내용을 읽는다. 여섯째 줄은 업무 이름을 출력한다. 일곱째 줄은 일일 거래를 읽을 계획을, 여덟째 줄은 계좌 잔액을 갱신할 계획을 출력한다. 아홉째 줄은 처리 결과를 쓸 계획을 출력한다. 이러한 순서는 앞으로 만들 업무의 흐름을 안내한다.

열째 줄의 PREVIEW ENDED는 안내가 끝났다는 뜻이다. 이 글을 출력하는 행위와 프로그램 실행을 끝내는 행위는 다르다. 종료 안내를 출력한 다음, 열한째 줄의 STOP RUN이 실제로 실행을 끝낸다. 마지막 줄까지 실행되면 터미널은 다음 명령을 받을 수 있는 상태로 돌아온다.

구역 제목과 프로그램 이름 선언에는 규칙에 맞는 마침표가 들어 있다. 실행 부분에서는 마지막 STOP RUN 뒤에 마침표를 두어 앞선 실행 문장들을 포함한 문장을 끝낸다. 마침표는 COBOL에서 구분과 문장 종료에 쓰이는 기호다. 줄바꿈 자체가 모든 문장을 끝내는 기호는 아니라는 점을 먼저 기억한다.

실행 부분의 다섯 DISPLAY와 STOP RUN은 위에서 아래로 이어진다. 첫 DISPLAY가 끝나면 다음 DISPLAY를 수행하고, 마지막 DISPLAY가 끝나면 STOP RUN을 수행한다. 이번 코드에는 흐름을 다른 곳으로 바꾸는 문장이 없으므로 소스의 순서와 출력 순서를 직접 비교할 수 있다.

실행 결과

main.cob를 저장한 폴더에서 다음 명령을 실행한다. 첫 명령은 컴파일러의 버전을 확인한다. 표시되는 버전 정보에서 GnuCOBOL 3.2 환경인지 확인한 다음 컴파일한다. 버전 안내에는 환경에 따라 부가 정보가 포함될 수 있으므로 아래에는 명령만 제시한다.

cobc -V

컴파일 명령은 다음과 같다. 제시한 소스는 GnuCOBOL 3.2의 고정 형식에서 경고 없이 컴파일되도록 작성되어 있다. 성공하면 컴파일 명령 자체는 아래의 업무 안내를 출력하지 않는다.

cobc -x -Wall main.cob

생성된 실행 파일을 실행한다.

./main

예상 출력은 다음과 같다. 맨 앞의 공백이나 따옴표는 출력되지 않으며, 각 줄 끝에서 줄이 바뀐다.

DAILY DEPOSIT BATCH
PLAN 1: READ DAILY TRANSACTIONS
PLAN 2: UPDATE ACCOUNT BALANCES
PLAN 3: WRITE PROCESSING RESULTS
PREVIEW ENDED

같은 실행 파일을 다시 실행해도 같은 결과가 나온다. 현재 시각을 출력하거나 사용자의 입력을 받지 않고, 소스에 적힌 문자열만 출력하기 때문이다. 출력이 다르면 먼저 소스의 따옴표 안 내용을 비교한다. 출력이 이전 수정 내용으로 보이면 저장과 재컴파일을 확인한다.

실무에서 자주 틀리는 것

실행 문장을 1열부터 적는다

다른 언어의 예제를 보며 줄 맨 앞부터 명령을 적는 습관이 생길 수 있다. 고정 형식에서는 앞의 열들이 별도 역할을 가지므로 실행 문장을 1열에서 시작하지 않는다. 아래의 틀린 줄은 DISPLAY가 일련번호 영역에 걸쳐 있다.

DISPLAY "DAILY DEPOSIT BATCH"

앞에 공백 열한 개를 두어 D가 12열에 오도록 고친다. 줄 앞 공백은 읽기 좋게 꾸미는 장식이 아니라 소스 형식의 일부다.

           DISPLAY "DAILY DEPOSIT BATCH"

출력할 안내에서 따옴표를 빠뜨린다

DISPLAY 뒤의 글을 무조건 화면에 내보내는 일반 문장으로 생각하면 따옴표를 생략하기 쉽다. 아래 코드는 DAILY와 다른 단어들을 문자열 값으로 표시하지 않는다. 이 프로그램에서는 해당 이름의 데이터 항목도 정의하지 않았으므로 컴파일할 수 없다.

           DISPLAY DAILY DEPOSIT BATCH

화면에 그대로 표시할 안내 전체를 따옴표로 감싼다. 여는 따옴표와 닫는 따옴표를 한 쌍으로 적고, 둘 다 72열 안에 놓는다.

           DISPLAY "DAILY DEPOSIT BATCH"

별표를 실행 영역에 놓고 주석이라고 생각한다

고정 형식에서 줄 전체를 주석으로 만들 때는 7열의 별표를 사용한다. 아래처럼 B 영역에 별표 하나를 놓아도 줄 전체 주석 표시가 되지 않는다. 일반 설명이 실행 문장처럼 읽히므로 오류의 원인이 된다.

           * PRINT THE JOB NAME

공백 여섯 개 뒤에 별표를 놓으면 별표가 7열에 온다. 그 뒤의 설명은 실행되지 않는다. 다음 줄의 DISPLAY만 화면 출력을 수행한다.

      * PRINT THE JOB NAME
           DISPLAY "DAILY DEPOSIT BATCH"

소스를 고친 뒤 이전 실행 파일을 실행한다

문자열을 고친 다음 ./main만 실행하면 이전에 컴파일한 내용이 나타날 수 있다. 실행 파일은 소스를 편집할 때 자동으로 바뀌지 않는다. 다음 소스 변경과 명령의 조합은 새 안내를 확인하려는 절차로는 부족하다.

           DISPLAY "CREDIT UNION DAILY BATCH"
./main

변경한 소스를 저장하고 다시 컴파일한 다음 실행한다. 컴파일에서 오류가 나면 먼저 소스를 고쳐야 한다. 오류가 난 상태에서 예전 main을 실행해 나온 출력은 변경한 코드의 검증 결과로 삼지 않는다.

cobc -x -Wall main.cob
./main

한눈에 보기

프로그램의 구조, 소스의 열 위치, 컴파일과 실행은 각각 확인할 대상이 다르다. 구역이 올바르게 나뉘어 있어도 열 위치가 틀리면 소스를 제대로 읽을 수 없고, 소스가 올바르게 저장되어 있어도 재컴파일하지 않으면 새 내용이 실행 파일에 반영되지 않는다.

작성부터 실행 확인까지 점검할 핵심
대상기억할 내용확인 방법
프로그램 구조식별·환경·데이터·실행 순서로 구역을 둔다네 DIVISION 제목의 순서를 읽는다
고정 형식제목은 8열, 실행 문장은 12열에서 시작한다공백 수와 72열 경계를 확인한다
화면 출력DISPLAY로 문자열을 출력한다따옴표 안의 내용과 출력 줄을 비교한다
컴파일cobc -x -Wall main.cob로 실행 파일을 만든다오류와 경고가 없는지 확인한다
실행 종료./main으로 실행하고 STOP RUN으로 끝낸다다섯 줄 출력 뒤 명령을 입력할 수 있는지 확인한다

이번 프로그램은 업무 처리의 출발점을 확인하는 안내 프로그램이다. 다음에는 DATA DIVISION에 실제 데이터 항목을 정의하고, PIC로 그 항목이 담을 값의 모양과 자릿수를 정한다. 그때부터 계좌 자료를 프로그램 안에서 어떻게 표현할지 구체적으로 다루게 된다.

연습 문제

  1. 완성 코드의 첫 출력만 CREDIT UNION DAILY BATCH로 바꾸라. 고정 형식을 유지하고 컴파일한 뒤, 전체 예상 출력을 적으라.
  2. 종료 안내 바로 앞에 DISPLAY "PLAN CHECK ENDED"를 추가하라. 새 문장이 시작할 열과, 추가한 뒤의 출력 줄 수를 설명하라.
  3. 완성 코드에서 이름 선언, 외부 환경 설명, 데이터 정의, 실제 실행을 담당하는 구역을 각각 찾으라. 이번 코드에서 환경 구역과 데이터 구역에 추가 내용이 없는 이유도 설명하라.
  4. DISPLAY "PREVIEW ENDED"를 DISPLAY "TRANSACTIONS COMPLETED"로 바꾸면 실제 거래 처리가 완료되었다고 판단할 수 있는지 설명하라. 실행 내용에 맞는 종료 안내를 하나 제안하라.

정답과 해설

첫 번째 문제에서는 첫 DISPLAY의 문자열만 바꾼다. 파일 이름과 프로그램 이름은 그대로 둔다. 수정한 줄은 다음과 같으며, D는 12열에 놓인다.

           DISPLAY "CREDIT UNION DAILY BATCH"

저장하고 cobc -x -Wall main.cob로 재컴파일한 뒤 ./main을 실행하면 다음과 같이 출력된다. 첫 줄만 바뀌고 나머지 줄의 순서는 같다.

CREDIT UNION DAILY BATCH
PLAN 1: READ DAILY TRANSACTIONS
PLAN 2: UPDATE ACCOUNT BALANCES
PLAN 3: WRITE PROCESSING RESULTS
PREVIEW ENDED

두 번째 문제에서는 새 DISPLAY를 B 영역의 시작인 12열에서 시작한다. 종료 안내와 STOP RUN 앞부분은 다음처럼 된다. 새 출력 한 줄이 더해지므로 전체 출력은 여섯 줄이다.

           DISPLAY "PLAN 3: WRITE PROCESSING RESULTS"
           DISPLAY "PLAN CHECK ENDED"
           DISPLAY "PREVIEW ENDED"
           STOP RUN.

세 번째 문제에서 이름 선언은 IDENTIFICATION DIVISION, 외부 환경 설명은 ENVIRONMENT DIVISION, 데이터 정의는 DATA DIVISION, 실제 실행은 PROCEDURE DIVISION이 맡는다. 이번 코드는 파일을 연결하지 않고 별도로 저장할 데이터 항목도 선언하지 않는다. 따라서 환경 구역과 데이터 구역에는 제목만 있다. 출력할 문자열은 DISPLAY 안에 직접 적혀 있다.

네 번째 문제에서는 실제 거래가 처리되었다고 판단할 수 없다. 따옴표 안의 글을 바꾸는 것은 화면 안내를 바꾸는 일이다. 거래 자료를 읽거나 잔액을 갱신하는 동작이 추가되지는 않는다. 실행 내용에 맞는 종료 안내로는 PREVIEW ENDED 또는 PLAN DISPLAY ENDED를 사용할 수 있다.

안내 문구는 실행한 일을 정확히 가리켜야 한다. 이 프로그램에서는 출력 결과가 정해진 순서로 나타나고 실행이 끝나는지를 확인한다. 프로그램이 할 일에 대한 계획과 프로그램이 이미 수행한 일을 구별하는 습관은 이후 실제 거래 자료를 다룰 때도 이어진다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

댓글을 남기려면 로그인이 필요합니다.