[ABAP] 기본 문법

Pretty DDongpig·2024년 9월 28일

모각소에서 정리한 노션을 벨로그로 이동하여 다시 정리한 글입니다.

1. Hello World 출력하기

REPORT ZHELLO_WORLD.
WRITE 'Hello, World!'.
  • REPORT: 프로그램의 이름을 정의
  • WRITE: 문자열을 출력하는 명령어


2. 변수 선언 및 사용

ABAP에서는 변수를 DATA 키워드를 사용해 선언한다.

REPORT ZVARIABLE_EXAMPLE.

DATA: gv_text TYPE string.

gv_text = 'ABAP 공부 중!'.
WRITE gv_text.
  • DATA: 변수를 선언할 때 사용, 위 코드에서는 gv_text라는 문자열 변수를 선언함
  • TYPE: 변수의 자료형을 정의, 위 코드에서는 string 자료형을 사용
  • gv_text = '...': 변수에 값을 할당


3. 조건문 (IF문)

REPORT ZIF_EXAMPLE.

DATA: gv_number TYPE i.

gv_number = 10.

IF gv_number > 5.
  WRITE 'gv_number는 5보다 크다.'.
ELSE.
  WRITE 'gv_number는 5보다 작거나 같다.'.
ENDIF.
  • IF ... ELSE ... ENDIF: 조건에 따라 다른 코드를 실행할 때 사용


4. 루프 (LOOP)

DO문을 사용한 간단한 반복 예제

REPORT ZLOOP_EXAMPLE.

DATA: gv_index TYPE i.

DO 5 TIMES.
  gv_index = sy-index.
  WRITE: / '반복 횟수: ', gv_index.
ENDDO.
  • DO ... ENDDO: 정해진 횟수만큼 반복
  • sy-index: 시스템 변수로 현재 반복 횟수를 의미


5. 내부 테이블 (Internal Table)

내부 테이블은 여러 개의 값을 저장하는 배열 같은 개념이다

REPORT ZINTERNAL_TABLE_EXAMPLE.

TYPES: BEGIN OF ty_person,
         name TYPE string,
         age  TYPE i,
       END OF ty_person.

DATA: lt_people TYPE TABLE OF ty_person,
      ls_person TYPE ty_person.

ls_person-name = 'Markus'.
ls_person-age = 45.
APPEND ls_person TO lt_people.

ls_person-name = 'Sophia'.
ls_person-age = 30.
APPEND ls_person TO lt_people.

LOOP AT lt_people INTO ls_person.
  WRITE: / ls_person-name, ' 나이: ', ls_person-age.
ENDLOOP.
  • TYPES: 구조를 정의
  • APPEND: 구조체 데이터를 내부 테이블에 추가
  • LOOP AT ... INTO: 내부 테이블을 순회하면서 각 행의 값을 ls_person에 할당

결과는

Markus 나이: 45
Sophia 나이: 30

위에서 헷갈린 점은

DATA: lt_people TYPE TABLE OF ty_person,
      ls_person TYPE ty_person.

이 부분이다.

더 자세하게 정리를 해보자면

왜 구조체 테이블을 선언하나?
구조체 테이블(lt_people)을 선언하는 이유는 여러 개의 데이터를 저장하기 위해서 이다. 예를 들어, ls_person은 한 사람의 정보만 저장할 수 있지만, 우리가 여러 사람의 정보를 저장하려면 테이블 같은 자료구조가 필요하다. lt_people이 그 역할을 테이블 역할을 한다.

데이터 흐름 예시
1. ls_person에 한 명의 정보를 담음 (예: 'Markus', 45).
2. 그 ls_person을 lt_people에 추가함 (APPEND).
3. 또 다른 사람의 정보를 ls_person에 담고 (Sophia, 30), 다시 lt_people에 추가함.

+----------+------+
| name | age |
+----------+------+
| Markus | 45 |
+----------+------+

profile
프리티똥피그

0개의 댓글