Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-08 00:05
관리 메뉴

Hey Tech

[SAP/ABAP] 구구단 프로그램 만들기(Internal Table, 반복문 활용) 본문

SW 개발/ABAP(SAP)

[SAP/ABAP] 구구단 프로그램 만들기(Internal Table, 반복문 활용)

Tony Park 2022. 3. 16. 11:09
728x90
반응형

본 포스팅에서는 SAP(ABAP)에서 구구단을 테이블에 저장하고 출력하는 예제 코드를 공유합니다.


📚 목차

1.  실행결과
2.  테이블 Fields
3.  전체 코드
4.  코드 설명
5.  실행결과

1.  실행결과

실행결과 먼저 공유합니다. 위와 같이 1단부터 9단까지의 구구단을 출력하는 프로그램을 만들고자 합니다. 본 프로그램은 각 자릿수의 값과 연산자(*), 그리고 결괏값까지를 모두 Internal Table에 저장하는 프로세스를 반복합니다. 또한, 테이블 내 행(ROW) 데이터를 하나씩 접근하여 출력하도록 반복합니다. 이어지는 섹션에서 해당 프로그램 구현을 위한 기본적인 세팅방법과 코드를 공유합니다.

2.  테이블 Fields

테이블 Fields는 위와 같이 구성하였습니다. 구구단에서 첫 번째 숫자를 STR1, 두 번째 숫자를 STR2 필드에 저장하고, 연산자를 OPER 필드에 저장합니다. STR1과 STR2의 곱셈 결과를 VAL 필드에 저장합니다. 패키지 생성부터 테이블, View, 도메인 등의 생성 및 기본 세팅은 아래 포스팅들을 참고해 주세요.

 

패키지와 테이블 생성방법은 아래 포스팅을 참고해 주세요.

https://heytech.tistory.com/326

 

[SAP/ABAP] 패키지 및 테이블 생성 방법

본 포스팅에서는 SAP에서 패키지와 테이블을 생성하는 방법에 대해 다룹니다. 📝 목차 1. 패키지 생성 2. 테이블 생성 1. 패키지 생성 통합 개발 환경인 Object Navigator로 이동합니다. T-Code는 SE80입

heytech.tistory.com

도메인, Data Element 생성 방법은 아래 포스팅을 참고해 주세요.

https://heytech.tistory.com/327

 

[SAP/ABAP] 도메인 및 Data Element 생성 방법

본 포스팅에서는 SAP에서 도메인과 Data Element를 생성하는 방법에 대해 다룹니다. 📝 목차 1. 도메인 생성 2. Data Element 생성 1. 도메인 생성 패키지 생성 확인 Data Domain을 생성하기에 앞서 패키지가

heytech.tistory.com

구조체 생성 방법은 아래 포스팅을 참고해 주세요.

https://heytech.tistory.com/329

 

[SAP/ABAP] 구조체 개념, 생성방법, 테이블 내 구조체 연결 방법

본 포스팅에서는 구조체의 개념부터 생성 방법, 테이블에 구조체를 연결하는 방법까지 알아봅니다. 1. 구조체란? 구조체는 테이블과 동일하게 필드로 구성되지만, 자체적으로 데이터를 저장할

heytech.tistory.com

Function Group, Maintenance View 생성 방법은 아래 포스팅을 참고해 주세요.

https://heytech.tistory.com/330

 

[SAP/ABAP] Function Group, View 생성 방법, Table Maintenance Generator 세팅

본 포스팅에서는 Function Group, View를 생성하는 방법과 Table Maintenance Generator 속성을 세팅하는 방법에 대해 알아봅니다. 목차 1. Function Group 생성 2. View 생성 3. Table Maintenance Generator 속..

heytech.tistory.com

3.  전체 코드

REPORT  ZOJT02_TEST01.
" 변수 정의
DATA: GT_A LIKE ZOJT02_T01 OCCURS 0 WITH HEADER LINE,
      GV_ITERATION TYPE I VALUE 9,
      GV_INTERVAL TYPE I VALUE 1.

" 변수 초기화
CLEAR: GT_A, GT_A[].

" 변수 할당
" 첫 번째 자리수는 1부터 시작하기 위해 값을 0으로 초기화
GT_A-STR1 = 0.
DO GV_ITERATION TIMES.
  " 2번째 자리수는 1부터 시작하기 위해 값을 0으로 초기화
  GT_A-STR2 = 0.
  " 첫 번째 자리수는 단별 loop가 끝나면 1씩 증가
  GT_A-STR1 = GT_A-STR1 + GV_INTERVAL.
  DO GV_ITERATION TIMES.
    " 2번째 자리수 1씩 증가
    GT_A-STR2 = GT_A-STR2 + GV_INTERVAL.
    GT_A-OPER = '*'.
    GT_A-VAL = GT_A-STR1 * GT_A-STR2.
    "Internal table에 값 추가
    APPEND GT_A.
    ENDDO.
ENDDO.

" 테이블 출력
LOOP AT GT_A INTO GT_A.
  " 각 단이 시작할 때마다 구분용 문장 출력
  IF GT_A-STR2 = 1.
    WRITE: /,'==========', GT_A-STR1, '단 =========='.
  ENDIF.
    WRITE: / GT_A-STR1,
             GT_A-OPER,
             GT_A-STR2,
             '=',
             GT_A-VAL.
ENDLOOP.

전체 코드 먼저 공유해 드립니다. 상세한 설명은 다음 섹션에서 다룹니다.

4.  코드 설명

4.1.  변수 정의

REPORT  ZOJT02_TEST01.
" 변수 정의
DATA: GT_A LIKE ZOJT02_T01 OCCURS 0 WITH HEADER LINE,
      GV_ITERATION TYPE I VALUE 9,
      GV_INTERVAL TYPE I VALUE 1.

- GT_A: 앞서 정의한 테이블을 참조하는 변수를 선언합니다.

- GV_ITERATION: 단수를 저장하는 변수로써 9단까지 구현하므로 초기값을 9로 설정합니다.

- GV_INTERVAL: 1씩 증가하는 단수와 곱할 숫자 값을 계산하기 위한 변수로써 초기값을 1로 설정합니다.

4.2.  변수 초기화

" 변수 초기화
CLEAR: GT_A, GT_A[].

Internal 테이블과 Structure 메모리를 초기화합니다.

4.3.  구구단 연산

" 변수 할당
" 첫 번째 자리수는 1부터 시작하기 위해 값을 0으로 초기화
GT_A-STR1 = 0.
DO GV_ITERATION TIMES.
  " 2번째 자리수는 1부터 시작하기 위해 값을 0으로 초기화
  GT_A-STR2 = 0.
  " 첫 번째 자리수는 단별 loop가 끝나면 1씩 증가
  GT_A-STR1 = GT_A-STR1 + GV_INTERVAL.
  DO GV_ITERATION TIMES.
    " 2번째 자리수 1씩 증가
    GT_A-STR2 = GT_A-STR2 + GV_INTERVAL.
    GT_A-OPER = '*'.
    GT_A-VAL = GT_A-STR1 * GT_A-STR2.
    "Internal table에 값 추가
    APPEND GT_A.
    ENDDO.
ENDDO.

이중 DO~ENDDO 구문을 활용하여 구구단 프로그램을 작성하였습니다. 첫 번째 반복문은 iteration마다 GT_A-STR1를 1씩 증가하도록 설계하였기 때문에 이중 반복문에 앞서 GT_A-STR1을 0으로 초기화하였습니다. 두 번째 반복문도 마찬가지로 iteration마다 GT_A-STR2를 1씩 증가하도록 설계하였기 때문에 두 번째 반복문이 시작하기에 앞서 GT_A-STR2를 0으로 초기화하였습니다. GT_A-OPER에는 연산자 기호(*)를 할당하고, GT_A-VAL 변수에 N단(=GT_A-STR1)의 1부터 9까지 곱한 값을 할당합니다.

4.4.  구구단 출력

" 테이블 출력
LOOP AT GT_A INTO GT_A.
  " 각 단이 시작할 때마다 구분용 문장 출력
  IF GT_A-STR2 = 1.
    WRITE: /,'==========', GT_A-STR1, '단 =========='.
  ENDIF.
    WRITE: / GT_A-STR1,
             GT_A-OPER,
             GT_A-STR2,
             '=',
             GT_A-VAL.
ENDLOOP.

이제 앞서 테이블에 저장한 값을 LOOP~ENDLOOP 반복문을 활용하여 차례로 출력합니다. 구구단에서 뒤에 곱해지는 값(GT_A-STR2)이 1인 경우(e.g., 1*1, 2*1, ..., 9*1)에는 IF 조건문을 활용하여 현재 단 정보를 출력하도록 작성하였습니다. 뒤에 곱해지는 값이 1이 아닌 경우에는 "GT_A-STR1*GT_A-STR2=GT_A-VAL" 형태로 출력되도록 프로그램을 작성하였습니다.

5.  실행결과

F8을 눌러 실행결과를 확인해 보시면 위와 같이 출력되는 것을 확인하실 수 있습니다.

📚 참고할 만한 포스팅

1.  SAP ERP 개념 및 12가지 모듈 소개
2.  [SAP/ABAP] 기본 화면 구성 및 SAP Workbench 개발 도구
3.  [SAP] 패키지, Software Component, Transport Layer 정리
4.  [SAP/ERP] CTS, Sandbox, Transport Organizer, IMG, NOTES 정리
5.  [SAP/ERP] Client, Company Code 개념 및 특징
6.  [SAP] ABAP 변수 네이밍 규칙
7.  [SAP/ABAP] 패키지 및 테이블 생성 방법
8.  [SAP/ABAP] 도메인 및 Data Element 생성 방법
9.  ERP 개념, 필요성, 국내 도입 현황, 시장 점유율
10. [SAP/ABAP] 도메인 및 Data Element 생성 방법
11. [SAP/ABAP] 구조체 개념, 생성방법, 테이블 내 구조체 연결 방법
12. [SAP/ABAP] Function Group, View 생성 방법, Table Maintenance Generator 세팅
13. [SAP/ABAP] 구구단 프로그램 만들기(Internal Table, 반복문 활용)


오늘은 ABAP을 활용하여 구구단 프로그램을 작성하는 간단한 예제를 살펴봤습니다.

포스팅 내용에 오류가 있거나 코드 리뷰, 피드백 모두 환영합니다😊

아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다 :)
고맙습니다.

728x90
반응형
Comments