ABAP에서는 데이터를 선언할 때 DATA 키워드를 사용한다. 자바의 변수 선언과 유사하지만, 데이터 타입을 명시적으로 지정하는 것이 일반적이다. 특히 ABAP에서는 내부 테이블이나 구조체와 같은 복잡한 데이터 타입을 많이 사용한다.
사용 상황: 데이터베이스 테이블에서 데이터를 가져오거나, 중간 결과를 처리할 때 변수 선언이 필요하다.
DATA: lv_value TYPE i, " 정수형 변수
lv_text TYPE string, " 문자열 변수
lt_table TYPE TABLE OF string, " 문자열을 담는 내부 테이블
ls_line TYPE string. " 내부 테이블의 행을 담는 변수
ABAP에서는 CONSTANTS 키워드를 사용하여 상수를 정의한다. 상수는 자주 변경되지 않는 값을 코드 내에서 일관되게 사용하고자 할 때 유용하다.
사용 상황: 고정된 값을 여러 번 사용해야 하거나, 코드를 읽기 쉽게 만들기 위해 사용된다.
CONSTANTS: lc_max_attempts TYPE i VALUE 5, " 최대 시도 횟수
lc_status_success TYPE char1 VALUE 'S'. " 성공 상태를 나타내는 상수
내부 테이블은 데이터베이스 테이블의 결과를 저장하거나, 대량의 데이터를 메모리에서 처리할 때 사용된다. 자바의 List와 유사하지만, ABAP의 내부 테이블은 구조화된 데이터 형식을 처리하는 데 특화되어 있다.
사용 상황: 조회한 데이터베이스 결과를 저장하여 여러 번 참조하거나, 대량의 데이터를 메모리 내에서 처리할 때 유용하다.
DATA: lt_customers TYPE TABLE OF zcustomer, " 고객 테이블
ls_customer TYPE zcustomer. " 고객 테이블의 행 구조
내부 테이블을 사용할 때는 SORT로 데이터를 정렬하고, READ로 특정 조건에 맞는 데이터를 검색할 수 있다.
사용 상황: 테이블 내에서 특정 데이터를 빠르게 찾거나, 순서를 정렬해야 할 때 사용된다.
SORT lt_customers BY name.
READ TABLE lt_customers INTO ls_customer WITH KEY name = 'John Doe'.
IF sy-subrc = 0.
WRITE: / '고객이 발견되었다:', ls_customer-name.
ELSE.
WRITE: / '고객을 찾을 수 없음.'.
ENDIF.
ABAP의 데이터 딕셔너리에서 테이블을 생성할 때, 각 필드의 데이터 타입, 길이, 그리고 키 필드를 설정한다. 자바의 데이터베이스 테이블 정의와 유사하지만, ABAP에서는 데이터 딕셔너리와 긴밀히 통합되어 있다.
사용 상황: 새로운 비즈니스 엔티티에 대한 데이터를 저장하기 위해 테이블을 정의할 때 유용하다.
TABLES: zcustomer. " 사용자 정의 테이블
도메인과 데이터 요소는 ABAP에서 데이터 타입을 더욱 정교하게 정의하는 데 사용된다. 도메인은 값의 범위와 데이터 타입을 정의하고, 데이터 요소는 필드에 의미를 부여하다.
도메인 정의 예시:
DOMAIN zcustomer_age
DATA TYPE INT2
LOWER CASE 18
UPPER CASE 120.
데이터 요소 정의 예시:
DATA ELEMENT zcust_name TYPE char30.
데이터 딕셔너리 구조: 문서에서는 테이블, 도메인, 데이터 요소 간의 관계를 시각적으로 보여주는 다이어그램이 포함되어 있다. 이 이미지에서는 데이터 딕셔너리가 어떻게 통합되어 있는지 시각적으로 표현하다.
내부 테이블은 ABAP에서 데이터를 메모리에 저장하고 처리하는 중요한 도구이다. 자바의 List와 비슷하지만, ABAP에서는 구조화된 데이터를 다루는 데 더 특화되어 있다.
사용 상황: 데이터베이스에서 대량의 데이터를 가져와 메모리 내에서 처리할 때 내부 테이블을 사용한다. 이를 통해 반복적으로 데이터를 조회하지 않고도 빠르게 처리할 수 있다.
DATA: lt_customers TYPE TABLE OF zcustomer, " 고객 데이터 테이블
ls_customer TYPE zcustomer. " 고객 데이터 행
내부 테이블에 데이터를 추가하는 방법은 APPEND 구문을 사용한다. 이는 자바의 add() 메서드와 유사하게 작동하다.
사용 상황: 데이터를 반복적으로 추가해야 하는 상황에서 사용된다. 예를 들어, 데이터베이스 조회 결과를 저장하거나 수동으로 데이터를 추가할 때 유용하다.
APPEND ls_customer TO lt_customers.
내부 테이블의 데이터를 읽을 때는 LOOP AT이나 READ TABLE 구문을 사용한다. 데이터를 순차적으로 읽거나 특정 조건에 맞는 데이터를 찾을 수 있다.
사용 상황: 데이터를 검색하거나 특정 조건에 맞는 행을 찾을 때 사용된다.
LOOP AT lt_customers INTO ls_customer.
WRITE: / ls_customer-name.
ENDLOOP.
READ TABLE lt_customers INTO ls_customer WITH KEY id = '123'.
내부 테이블 구조: 문서에는 내부 테이블의 구조와 데이터가 어떻게 메모리 내에서 관리되는지 설명한 다이어그램이 포함되어 있다. 이를 통해 내부 테이블의 행과 열이 어떻게 구성되는지 시각적으로 확인할 수 있다.
내부 테이블은 데이터를 필터링하거나 정렬하는 기능을 제공하다. SORT와 DELETE 구문을 사용해 데이터의 순서를 정렬하고, 조건에 맞는 데이터를 삭제할 수 있다.
사용 상황: 대량의 데이터를 처리할 때 조건에 맞는 데이터를 필터링하거나, 데이터를 특정 기준으로 정렬해야 할 때 유용하다.
SORT lt_customers BY name.
DELETE lt_customers WHERE city = 'Seoul'.
필터링된 데이터를 검색할 때 READ TABLE을 사용한다. 데이터의 특정 키 값을 기준으로 행을 검색할 수 있다.
사용 상황: 필터링된 데이터 중에서 특정 키에 맞는 데이터를 찾는 데 유용하다.
READ TABLE lt_customers INTO ls_customer WITH KEY name = 'John Doe'.
IF sy-subrc = 0.
WRITE: / '고객이 발견되었다: ', ls_customer-name.
ELSE.
WRITE: / '고객을 찾을 수 없음.'.
ENDIF.
필터링 및 정렬 흐름도: 필터링과 정렬의 흐름을 시각적으로 보여주는 다이어그램이 포함되어 있다. 내부 테이블에서 데이터를 어떻게 처리하는지 한눈에 확인할 수 있는 이미지이다.
IDoc(Intermediate Document)은 SAP 시스템 간 데이터 전송을 위한 표준화된 문서 형식.
사용 상황: 대량의 데이터를 전송하거나, 비동기식으로 시스템 간 통신을 할 때 사용.
IDoc은 송신 시스템에서 생성된 후 수신 시스템에서 처리됨. 전송된 IDoc은 로그를 통해 추적 가능.
CALL FUNCTION 'IDOC_INBOUND_WRITE_TO_DB'
EXPORTING
idoc_control = control_structure
TABLES
idoc_data = data_table.
IDoc의 전송 및 수신 과정을 설명하는 다이어그램이 포함되어 있으며, 시스템 간의 데이터 흐름을 시각적으로 보여줌.
ABAP은 GUI_UPLOAD와 GUI_DOWNLOAD를 사용하여 파일을 업로드하거나 다운로드할 수 있음.
사용 상황: 로컬 파일 시스템에서 데이터를 가져오거나 내보낼 때 사용.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:\data.txt'
TABLES
data_tab = lt_data.
SAP 시스템 내 파일 경로는 논리적 경로로 관리되며, 이를 통해 파일을 처리할 수 있음.
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
logical_filename = 'LOGICAL_FILE'
IMPORTING
physical_filename = lv_physical_name.
파일 업로드 및 다운로드 절차를 설명하는 다이어그램이 포함되어 있으며, 파일 처리의 흐름을 시각적으로 설명.
데이터베이스 테이블 간의 관계를 정의하고, 이를 통해 효율적인 데이터 관리를 가능하게 하는 것이 데이터 모델링의 목표.
사용 상황: 대규모 데이터를 저장하고 관리할 때 적절한 데이터 구조 설계가 필수적.
ABAP 데이터 사전(DDIC)은 테이블, 뷰, 데이터 타입 등을 정의하는 데 사용됨.
DATA: lv_data TYPE ztable-field.
데이터베이스 테이블 간의 관계와 데이터 사전의 구조를 설명하는 다이어그램이 포함되어 있음.
인라인 선언은 ABAP 7.4 버전에서 새롭게 도입된 기능으로, 변수를 선언할 때 DATA 구문을 간단하게 사용함.
기존에는 변수의 타입과 이름을 명확히 지정해야 했지만, 이제는 선언과 동시에 값을 지정할 수 있음.
이렇게 하면 코드가 짧아지고 가독성이 높아짐.
DATA: lv_vehicle TYPE string.
lv_vehicle = 'Mercedes'.
DATA(lv_vehicle) = 'Mercedes'.
위와 같이 한 줄로 변수를 선언하고 값을 대입할 수 있음. 데이터 타입도 ABAP 컴파일러가 자동으로 추론함.
필드 심볼은 메모리의 특정 영역을 참조하는 포인터와 비슷한 개념이다.
필드 심볼을 사용하면 테이블의 데이터를 참조만 하고, 메모리 복사 없이 데이터를 처리할 수 있어 성능이 향상된다.
특히 반복문에서 데이터를 다룰 때 유용하다.
FIELD-SYMBOLS: <fs_vehicle> TYPE any.
LOOP AT lt_vehicles ASSIGNING <fs_vehicle>.
WRITE: / <fs_vehicle>.
ENDLOOP.
위 예시에서 필드 심볼 <fs_vehicle>은 테이블의 각 행을 참조하며, ASSIGNING 구문을 통해 반복문 내에서 데이터를 효율적으로 처리한다.
ABAP 7.4에서는 타입 추론을 통해 변수를 선언할 때 컴파일러가 자동으로 데이터 타입을 결정한다.
이렇게 하면 복잡한 데이터 타입 선언을 생략할 수 있어 코드 작성이 더욱 간단해진다.
DATA(lo_person) = NEW zcl_person( name = 'John Doe' ).
위 예시에서는 클래스 zcl_person의 인스턴스를 생성하면서 DATA 구문으로 타입을 명시할 필요 없이 lo_person을 선언할 수 있다.
대량 데이터 처리는 SAP 시스템에서 매우 중요하다.
데이터베이스 테이블에서 많은 데이터를 처리할 때, 성능을 최적화하는 방법 중 하나는 FOR ALL ENTRIES 구문을 사용하는 것이다.
이를 통해 여러 조건에 맞는 데이터를 한 번에 조회할 수 있다.
SELECT * FROM zorders INTO TABLE lt_orders
FOR ALL ENTRIES IN lt_customers
WHERE customer_id = lt_customers-id.
이 코드는 lt_customers 테이블의 각 행에 대해 해당 고객의 주문 데이터를 lt_orders 테이블에 한 번에 조회한다.
이렇게 하면 여러 번의 개별적인 SELECT 구문을 사용하는 것보다 성능이 훨씬 좋아진다.
버퍼링과 인덱싱은 데이터베이스 성능을 최적화하는 중요한 방법이다.
데이터베이스 테이블에 버퍼링을 설정하면, 자주 조회되는 데이터는 메모리에서 바로 조회되므로 성능이 향상된다.
SELECT * FROM ztable INTO TABLE lt_data WHERE key_field = 'value'.