집단기억장소(Group Data Item)는 COBOL에서 데이터 항목들을 그룹화하고 구조화하기 위해 사용되는 개념입니다. 이를 통해 관련 있는 데이터를 하나의 논리적인 단위로 묶어서 처리할 수 있습니다. 집단기억장소는 레코드(Record)나 구조체(Structure)와 유사한 역할을 하며, 데이터 아이템을 보다 구조적으로 조직화하는데 사용됩니다.
집단기억장소는 주로 다음과 같은 상황에서 활용됩니다:
- 레코드: 여러 개의 데이터 아이템들을 논리적인 그룹으로 묶어 하나의 레코드로 나타낼 때 사용됩니다.
- 구조체: 여러 데이터 아이템들을 하나의 구조체로 정의하여 코드를 보다 의미있게 구조화할 때 사용됩니다.
중첩된 데이터: 데이터의 계층 구조를 나타내거나 중첩된 형태로 표현할 때 사용됩니다.
집단기억장소는 01 레벨의 수준 수식자로 시작하며, 그 아래에 하위 레벨의 데이터 아이템들을 포함할 수 있습니다. 각 데이터 아이템은 고유한 이름과 데이터 타입을 가지며, 해당 집단기억장소를 구성하는 일부입니다.
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_GROUP_DATA_ITEM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMPLOYEE-INFO. *> 집단기억장소 선언
05 EMPLOYEE-ID PIC 9(6) VALUE 123456.
05 FIRST-NAME PIC X(20) VALUE 'John'.
05 LAST-NAME PIC X(20) VALUE 'Doe'.
05 SALARY PIC 9(7)V99 VALUE 50000.00.
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Employee ID: ' EMPLOYEE-ID.
DISPLAY 'Name: ' FIRST-NAME ' ' LAST-NAME.
DISPLAY 'Salary: ' SALARY.
STOP RUN. *> 프로그램 실행 종료
****결과
Employee ID: 123456
Name: John Doe
Salary: 50000.00
코볼(COBOL)에서 독립기억장소(Independent Data Item)란, 다른 데이터 아이템의 하위 항목으로 나타나지 않고 독립적으로 데이터를 저장하거나 처리하기 위해 사용되는 변수나 데이터 아이템을 의미합니다. 독립기억장소는 보통 그 자체로 하나의 값을 나타내며, 더 큰 데이터 구조의 일부로 사용되지 않는 독립적인 데이터를 다루기 위해 사용됩니다.
독립기억장소는 일반적으로 77 레벨의 수준 수식자로 시작하며, 변수의 이름과 데이터 타입을 정의합니다. 독립기억장소는 다른 레벨의 데이터 아이템을 포함하지 않으며, 해당 변수 자체로 데이터를 표현합니다.
독립기억장소는 주로 아래와 같은 상황에서 활용됩니다:
- 단일 값 저장: 하나의 값만을 저장하고 처리할 때 사용됩니다.
- 임시 변수: 임시적으로 데이터를 저장하거나 처리할 때 사용됩니다.
- 간단한 데이터: 다른 복잡한 데이터 구조 없이 간단한 데이터를 다룰 때 사용됩니다.
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_INDEPENDENT_DATA_ITEM.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 AGE PIC 99 VALUE 30. *> 독립기억장소로 정의된 변수
PROCEDURE DIVISION.
SiJak-P.
DISPLAY 'Age: ' AGE.
ADD 10 TO AGE. *> 독립기억장소 변수의 값을 변경
DISPLAY 'New Age: ' AGE.
STOP RUN. *> 프로그램 실행 종료
*** 결과
Age: 30
New Age: 40
COBOL에서 MOVE 문은 데이터를 한 위치에서 다른 위치로 복사하는데 사용되는 기본적인 연산입니다. 이를 통해 변수, 상수, 그리고 데이터 아이템을 다른 변수나 아이템에 할당하거나 복사할 수 있습니다. MOVE 문은 데이터의 값 자체를 복사하며, 할당된 메모리 영역이나 아이템의 크기 및 형식은 동일해야 합니다.
MOVE source TO target
** source: 값을 복사하고자 하는 원본 데이터입니다.
** target: 값을 복사하여 저장하고자 하는 대상 변수나 데이터 아이템입니다.
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_MOVE_EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-DATA PIC X(10) VALUE 'Hello'.
01 DESTINATION-DATA PIC X(10).
PROCEDURE DIVISION.
SiJak-P.
MOVE SOURCE-DATA TO DESTINATION-DATA. *> SOURCE-DATA 값을 DESTINATION-DATA로 복사
DISPLAY 'Source Data: ' SOURCE-DATA.
DISPLAY 'Destination Data: ' DESTINATION-DATA.
STOP RUN. *> 프로그램 실행 종료
MOVE 자료 TO 기억장소1 기억장소2 ...
- 자료를 지정한 각 기억장소에 수록한다.
- 자료는 리터럴 또는 기억장소 (연산식 불가능)
- 당연히 자료는 기억장소의 PIC 구에 맞추어 수록된다.
77 Num1 PIC 999.99.
77 Num2 PIC +99.9.
77 Char01 PIC X(7).
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_MOVE_DATA_INDEPENDENT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-DATA PIC X(10) VALUE 'Hello'.
01 DESTINATION-ARRAY.
05 DESTINATION-1 PIC X(10).
05 DESTINATION-2 PIC X(10).
05 DESTINATION-3 PIC X(10).
PROCEDURE DIVISION.
SiJak-P.
MOVE SOURCE-DATA TO DESTINATION-ARRAY.
*> SOURCE-DATA 값을 DESTINATION-ARRAY로 복사
DISPLAY 'Source Data: ' SOURCE-DATA.
DISPLAY 'Destination 1: ' DESTINATION-1.
DISPLAY 'Destination 2: ' DESTINATION-2.
DISPLAY 'Destination 3: ' DESTINATION-3.
STOP RUN.
*> 프로그램 실행 종료
[코드 예시]
IDENTIFICATION DIVISION.
PROGRAM-ID. 06_MOVE_GROUP_DATA_ITEM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PERSONAL-INFO. *> 집단기억장소 선언
05 FIRST-NAME PIC X(20) VALUE 'John'.
05 LAST-NAME PIC X(20) VALUE 'Doe'.
05 AGE PIC 99 VALUE 30.
01 COPIED-PERSONAL-INFO. *> 또 다른 집단기억장소 선언
05 COPIED-FIRST-NAME PIC X(20).
05 COPIED-LAST-NAME PIC X(20).
05 COPIED-AGE PIC 99.
PROCEDURE DIVISION.
SiJak-P.
MOVE PERSONAL-INFO TO COPIED-PERSONAL-INFO. *> PERSONAL-INFO 데이터를 COPIED-PERSONAL-INFO로 복사
DISPLAY 'Original First Name: ' FIRST-NAME ' Last Name: ' LAST-NAME ' Age: ' AGE.
DISPLAY 'Copied First Name: ' COPIED-FIRST-NAME ' Last Name: ' COPIED-LAST-NAME ' Age: ' COPIED-AGE.
STOP RUN. *> 프로그램 실행 종료