Cobol 문법 (1) : Division

yoneeki·2023년 8월 7일

cobolGrmr

목록 보기
1/11

코볼

  • Common Business Oriented Language
  • 50년대까지 쓰이던 어셈블리어, 기계어보다 편리하게 쓰기 위해 등장.

코볼 문법의 특징

  • 일상 영어 표현 방식으로 프로그램을 기술한다
  • 프로그램의 형식이 정형적이다
ADD GuGer Sansu GIVING Hab. 
DIVIDE HabGye BY 2 GIVING PyungGyun.
MOVE Yonee-Record TO Out-Record.
WRITE Out-Record.
  • ADD GuGer Sansu GIVING Hab. : GuGer과 Sansu를 더하여 그 결과를 Hab에 수록
  • DIVIDE HabGye BY 2 GIVING PyungGyun : HabGye를 2로 나누어 그 결과를 PyungGyun에 수록
  • MOVE Yonee-Record TO Out-Record : Yonee-Record를 Out-Record로 복사(이동)
  • WRITE Out-Record.

COBOL의 Division

  • COBOL 프로그램은 여러 섹션으로 구성되어 있으며, 이러한 섹션은 "DIVISION"이라고 불리는 섹션들의 그룹으로 구성됩니다. 각 DIVISION은 특정 유형의 작업을 수행하도록 설계되었습니다. COBOL에서 사용되는 주요 DIVISION은 다음과 같습니다:

IDENTIFICATION DIVISION: 프로그램의 기본 정보를 정의하는 곳으로, 프로그램의 이름, 작성자, 버전 등과 같은 메타데이터를 포함합니다. // 표제 부문. 프로그램에 대한 설명사항을 기술.

ENVIRONMENT DIVISION: 프로그램이 실행되는 환경을 설정하는 곳으로, 파일 및 입출력 장치와 관련된 설정을 다룹니다. // 환경 부문(생략 가능). 컴퓨터 시스템과 파일 할당에 관한 사항을 기술.

DATA DIVISION: 프로그램의 데이터 구조를 정의하는 곳으로, 변수 및 데이터의 형식, 크기, 초기값 등을 선언합니다. // 자료 부문. 프로그램에서 사용되는 자료에 대한 사항을 기술.

PROCEDURE DIVISION: 실제 프로그램 로직이 작성되는 곳으로, 프로그램의 동작과 절차를 기술합니다. 프로시저(Procedure)들이 여기에 포함됩니다. // 처리 부문. 프로그램의 실행 과정을 기술.

  • 각 DIVISION은 프로그램의 여러 측면을 분리하여 관리하고, 유지보수 및 협업을 용이하게 하기 위해 사용됩니다. COBOL 프로그램은 이러한 DIVISION의 조합으로 구성되며, 이를 통해 프로그램의 구조를 논리적이고 읽기 쉽게 유지할 수 있습니다.

원리합계 구하는 코드

코드

IDENTIFICATION DIVISION.
PROGRAM-ID. WONRI.                       *> 프로그램 식별 부분
AUTHOR. YONEE.                            *> 프로그램 작성자 정보
REMARKS. 원리합계.                         *> 비고 정보

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
    CURRENCY SIGN IS 'w'.                *> 환경 설정 부분

DATA DIVISION.
WORKING-STORAGE SECTION.
77  I         PIC 99     VALUE 1.        *> 카운터 변수 I (초기값 1)
77  WonGeum   PIC 9(5)   VALUE 10000.    *> 원금 변수 WonGeum (초기값 10000)
77  Ija       PIC 9(4)V9 .                *> 이자 변수 Ija (소수점 형식)
77  Hab       PIC 9(5)V9.                 *> 합계 변수 Hab

PROCEDURE DIVISION.
    SiJak-P.
        DISPLAY "========================="
        DISPLAY "원금     이자      합계"
        PERFORM GyeSan-P 5 TIMES         *> GyeSan-P 프로시저를 5번 반복 실행
        GO TO Keut-P.

    GyeSan-P.
        COMPUTE Ija = WonGeum * 0.1       *> 이자 계산: 원금 * 0.1
        COMPUTE Hab = WonGeum + Ija       *> 합계 계산: 원금 + 이자
        DISPLAY WonGeum "   " Ija "    " Hab  *> 원금, 이자, 합계를 출력
        ADD 10000 TO WonGeum.            *> 원금에 10000을 추가

    Keut-P.
        DISPLAY "========================="
        DISPLAY "   "
        DISPLAY "실행 끝"
        STOP RUN.                          *> 프로그램 실행 종료

결과

=========================
원금     이자      합계
10000   1000.0    11000.0
20000   2000.0    22000.0
30000   3000.0    33000.0
40000   4000.0    44000.0
50000   5000.0    55000.0
=========================
   
실행 끝

IDENTIFICATION DIVISION

표제 부문

  • 프로그램의 시작 부문
    1. PROGRAM-ID. : 프로그램명
    2. AUTHOR. : 작성자
    3. INSTALLATION. : 설치 장소
    4. DATE-WRITTEN. : 작성 날짜
    5. DATE-COMPILED : 컴파일 날짜
    6. SECURITY : 보안 사항
    7. REMARKS. : 참고 사항
  • 위의 7개 사항 중 <프로그램명 (PROGRAM-ID)>는 반드시 기술해야 하며 가장 처음에 기술해야 한다. 나머지 사항은 생략 가능.
  • 표제부분의 사항을 기술할 때에는 지정된 예약어를 사용한다.
  • 위 7개 사항을 모두 기술한 IDENTIFICATION DIVISION
IDENTIFICATION DIVISION.
PROGRAM-ID. WONRI.                       *> 프로그램명
AUTHOR. YONEE.                            *> 작성자
INSTALLATION. HQ Office.                 *> 설치 장소
DATE-WRITTEN. 2023-08-07.                 *> 작성 날짜
DATE-COMPILED. 2023-08-08.                *> 컴파일 날짜
SECURITY. 암호 : 1234						   *> 보안 사항
SECURITY. 관리부에서만 사용.                   *> 보안 사항
REMARKS. 원리합계 계산.   					*> 참고 사항
REMARKS. 요니은행/연말정산.   				   *> 참고 사항

ENVIRONMENT DIVISION

환경 부문

  1. CONFIGURATION SECTION : 컴퓨터 시스템에 대한 사항을 기술.
  2. INPUT-OUTPUT SECTION : 입출력 관련 사항을 기술
  • 예시
       ENVIRONMENT         DIVISION.
       CONFIGURATION       SECTION.
       SOURCE-COMPUTER.    COMPUTER-X.
       OBJECT-COMPUTER.    COMPUTER-Y.
       SPECIAL-NAMES.  
           CURRENCY SIGN IS 'W'.
           * 특수 이름 섹션: 통화 기호를 'W'로 설정

       * ------------------------------

       INPUT-OUTPUT        SECTION.
       FILE-CONTROL.
           * 파일 제어 섹션: 입력 및 출력 파일 설정
           SELECT IN-FILE ASSIGN TO 'JaRyo.DAT'.
           * IN-FILE 파일 선택: 'JaRyo.DAT' 파일에 연결
           SELECT OUT-FILE ASSIGN TO 'Bogoseo.DAT'.
           * OUT-FILE 파일 선택: 'Bogoseo.DAT' 파일에 연결

       I-O-CONTROL.
           * 입출력 제어 섹션
           RETURN EVERY 100 RECORDS OF IN-FILE.
           * IN-FILE의 모든 100개의 레코드마다 리턴

CONFIGURATION SECTION

  • 컴퓨터 시스템에 대한 사항을 기술

    1. SOURCE-COMPUTER. : 프로그램을 개발한 컴퓨터 기종
    2. OBJECT-COMPUTER. : 프로그램이 사용되는 컴퓨터 기종
    3. SPECIAL-NAMES. : 프로그램 중에서 사용되는 특수 명칭
      (Mnemonic : 니모닉)
  • SPECIAL-NAMES. : 프로그램 중에서 사용되는 특수 명칭을 적음. 여기에 사용할 수 있는 예약어는 여러가지가 있으나 구체적인 내용은 컴퓨터 기종에 따라 다름. ex. CURRENCY SIGN IS 'W'

  • FILE-CONTROL : SELECT 문을 사용하여 <입출력에 사용할 입출력 장치>를 할당.

  • I-O-CONTROL : 외부장치에로의 입출력 제어에 관한 사항을 기술.

DATA DIVISION

자료 부문

  • 프로그램의 처리대상/결과/중간결과 등을 보관할 기억장소(메모리)를 할당하고, 그 구조를 정의한다.
  • 예시
       DATA                    DIVISION.
       FILE                    SECTION.
       FD F0      LABEL RECORDS ARE STANDARD
                   VALUE OF FILE-ID IS "In-File"
                   DATA RECORD IS In-Record.
       01      In-Record.
           02 Irum     PIC     X(10).
           02 GuGer    PIC     9(3).
           02 SanSu    PIC     9(3).
           * ---------------------------------------------------

       WORKING-STORAGE         SECTION.
       77      X           PIC     9(5).
       77      Y           PIC     9(5).
           * ---------------------------------------------------

       LINKAGE                 SECTION.
       77      InJa1           PIC     X(5).
       77      InJa2           PIC     9(3).
           * ---------------------------------------------------

       REPORT                  SECTION.
       RD R0  REPORT        IS STANDARD
           HEADING                 "Report Heading"
           FIRST DETAIL            2 LINES AFTER 1.
               * 리포트 섹션: 리포트 파일 정의와 레포트 관련 사항

       01  Rpt-Line.
           05  Rpt-Field1      PIC X(10).
           05  Rpt-Field2      PIC X(5).
           * 리포트 라인 정의: 리포트 필드들에 대한 구조

       01  Rpt-Footer.
           05  Total-Amount    PIC $$$$$$$.99.
               * 리포트 푸터 정의: 총액 필드

       01  Rpt-Summary.
           05  Summary-Title   PIC X(20) VALUE "Summary Report".
           05  Summary-Amount  PIC $$$$$$$.99.
               * 리포트 서머리 정의: 서머리 제목과 금액 필드

           * ---------------------------------------------------

PROCEDURE DIVISION

처리 부문

  • ENVIRONMENT DIVISION이나 DATA DIVISION은 프로그램 처리를 위한 준비 부문이지만, 그것에 대한 처리 집행 부문은 PROCEDURE DIVISION이다.
  • 예시
       PROCEDURE           DIVISION.

       SIJAK-P.    * ----- SIJAK-P 프로시저 -----
           DISPLAY "==========================="
           DISPLAY "원금     이자      합계"
           DISPLAY "==========================="
           PERFORM GYESAN-P 5 TIMES.
           GO TO   KEUT-P.

       GYESAN-P.
           COMPUTE IJA = WONGEUM * 0.1.
           * 원금에 10%의 이자 계산
           COMPUTE HAB = WONGEUM + IJA.
           * 이자를 원금에 더한 총액 계산
           DISPLAY WONGEUM "   " IJA "    " HAB.
           * 계산 결과 출력
           ADD 10000 TO WONGEUM.
           * 원금에 10000 추가

       KEUT-P.
           DISPLAY "========================="
           DISPLAY "   "
           DISPLAY "실행 끝"
           STOP RUN.
           * 프로그램 종료

프로시저

  • COBOL 프로시저는 프로그램의 일련의 작업 단계를 정의하는 논리적인 블록입니다.
  • 프로시저는 주로 특정 작업을 수행하기 위해 관련된 코드를 묶어 구성하며, 프로그램의 유지보수 및 가독성을 향상시키는 데 도움이 됩니다.
  • COBOL 프로시저는 프로그램의 중요한 요소 중 하나로, 코드의 모듈화와 구조화를 도와주는 도구입니다. 개발자는 특정 작업을 프로시저로 정의하고, 필요할 때 호출하여 사용함으로써 더 효율적이고 유지보수 가능한 프로그램을 작성할 수 있습니다.
  • COBOL에서 프로시저는 PROCEDURE DIVISION 섹션 내에서 정의됩니다.
  • 구조
PROCEDURE DIVISION.
   프로시저 이름.         // 프로시저 시작
       // 프로시저 내용
   EXIT 프로시저 이름.    // 프로시저 종료

자바의 메서드 / 코볼의 프로시저

  • COBOL의 프로시저와 자바의 메서드는 일부 유사한 측면이 있지만, 개념적으로는 조금 다릅니다.

  • 유사성

    1. 모듈화: COBOL의 프로시저와 자바의 메서드는 모두 코드의 모듈화를 가능하게 합니다. 이들은 특정 작업 또는 동작을 논리적으로 묶어 관리할 수 있는 방법을 제공합니다.
    2. 재사용성: 양쪽 모두 프로그램의 재사용성을 증가시키는데 도움을 줍니다. 프로시저나 메서드를 작성한 후 여러 프로그램에서 호출하여 재사용할 수 있습니다.
    3. 코드 가독성: 프로시저와 메서드는 코드를 논리적인 블록으로 구성하여 가독성을 향상시키는데 도움을 줍니다.
  • 차이점

    1. 선언 방식: COBOL의 프로시저는 PROCEDURE DIVISION 안에서 정의되며, 호출하기 위해 PERFORM 문을 사용합니다. 반면 자바의 메서드는 클래스 안에 정의되며, 호출하기 위해 해당 메서드의 이름과 필요한 매개변수를 사용합니다.
    2. 리턴 타입: 자바의 메서드는 일반적으로 값을 반환할 수 있으며, 반환 타입을 지정합니다. COBOL의 프로시저는 일반적으로 값을 반환하지 않습니다.
    3. 프로그래밍 언어 특성: COBOL은 업무 처리 중심의 프로그래밍 언어이며, 프로시저는 업무 로직을 처리하기 위해 사용됩니다. 자바는 다목적 프로그래밍 언어이며, 메서드는 다양한 작업을 수행할 수 있습니다.
    4. 오버로딩: 자바의 메서드는 오버로딩을 지원하여 같은 이름의 메서드를 여러 형태로 정의할 수 있습니다. COBOL의 프로시저는 오버로딩을 지원하지 않습니다.
  • 요약하면, COBOL의 프로시저와 자바의 메서드는 코드 모듈화와 재사용성을 위한 목적에서 유사한 역할을 하지만, 프로그래밍 언어의 특성에 따라 구현 방식이 다를 수 있습니다.

프로시저 분할

  • PROCEDURE DIVISION은 필요한 경우 여러 개의 프로시저로 분할하여 기술한다.

  • 이와 같은 필요성은 다음과 같은 경우에 발생한다.

    1. GO TO, PERFORM 문으로 프로그램의 실행을 다른 곳으로 이동시킬 때.
    2. 내용이 길거나 복잡한 처리를 하는 루틴의 각 부분의 기능에 대한 가독성을 증대시킬 때.
  • 프로그램의 각 부분에 프로시저 명을 지정할 때는 다음 사항에 유의해야 함.

    1. 프로시저명의 끝에 .을 적는다.
    2. 프로시저 명이 적힌 줄부터 다음 프로시저 명이 적힌 줄까지가 하나의 프로시저로 간주, 처리된다.

섹션 분할

  • PROCEDURE DIVISION은 필요한 경우 여러 개의 섹션으로 분할하여 기술하기도 한다.
  • 코드 예시
       IDENTIFICATION DIVISION.
       PROGRAM-ID. EXAMPLE.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  X        PIC 9(5).
       01  Y        PIC 9(5).
       
       LINKAGE SECTION.
       01  InData   PIC X(10).
       01  OutData  PIC X(10).

       PROCEDURE DIVISION.
           PERFORM Initialization
           PERFORM Calculate-Sum
           PERFORM Display-Result
           PERFORM Finalization
           GOBACK.

       Initialization.
           MOVE 10000 TO X
           MOVE 5000 TO Y.

       Calculate-Sum.
           COMPUTE Result = X + Y.

       Display-Result.
           DISPLAY "Sum: " Result.

       Finalization.
           MOVE "Finished" TO OutData.

       END PROGRAM EXAMPLE.
  • 주석 버전
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
       * 프로그램 식별 정보 섹션: 프로그램 이름 정의

DATA DIVISION.
WORKING-STORAGE SECTION.
01  X        PIC 9(5).
01  Y        PIC 9(5).
       * 데이터 섹션: 변수 X와 Y를 선언

LINKAGE SECTION.
01  InData   PIC X(10).
01  OutData  PIC X(10).
       * 링크 섹션: 프로그램과 다른 프로그램 간의 
       * 데이터 교환을 위한 변수 InData와 OutData를 선언

PROCEDURE DIVISION.
       * 프로시저 섹션 시작

   PERFORM Initialization
       * Initialization 섹션 호출

   PERFORM Calculate-Sum
       * Calculate-Sum 섹션 호출

   PERFORM Display-Result
       * Display-Result 섹션 호출

   PERFORM Finalization
       * Finalization 섹션 호출

   GOBACK.
       * 프로그램 종료

Initialization.
       * 초기화 섹션 시작
   MOVE 10000 TO X
       * 변수 X에 10000을 대입
   MOVE 5000 TO Y.
       * 변수 Y에 5000을 대입

Calculate-Sum.
       * 합계 계산 섹션 시작
   COMPUTE Result = X + Y.
       * 변수 Result에 X와 Y의 합을 계산하여 대입

Display-Result.
       * 결과 출력 섹션 시작
   DISPLAY "Sum: " Result.
       * 합계를 화면에 출력

Finalization.
       * 마무리 섹션 시작
   MOVE "Finished" TO OutData.
       * 변수 OutData에 "Finished"를 대입

END PROGRAM EXAMPLE.
       * 프로그램 종료
  • 위 코드에서 PROCEDURE DIVISION은 Initialization, Calculate-Sum, Display-Result, Finalization 등 여러 섹션으로 분할되어 있음.
  • 각 섹션은 프로그램의 특정 단계를 담당하며, 코드의 모듈화와 가독성을 향상시킴.
  • 프로그램의 로직이나 기능에 따라 섹션을 나누어 작성하여 프로시저의 구조를 보다 명확하게 만들 수 있음.
profile
Working Abroad ...

0개의 댓글