본문 바로가기

ABAP 프로그래밍 개념/ABAP Data Dictioanry

3.2 Structure

앞선 글들에서 Structure를 생성하는 것에 대해 논의했으며, Structure 생성에 관련된 대부분의 단계는 이 카테고리의 이전 1.1번 글에서 생성하는 데이터베이스 테이블과 유사합니다.

Structure는 elementary data types, 다른 structures, 또는 table types을 포함할 수 있습니다. Structure는 임의의 깊이로 중첩될 수 있습니다. Structure를 사용하면 유사한 필드가 여러 객체(예: 프로그램, 함수 모듈 인터페이스 등)에서 사용될 때 해당 필드를 시스템 중앙(SE11)에서 유지할 수 있습니다. Structure의 구성 요소는 아래 그림의 Typing Method 열에 표시된대로 elementary types, reference types, boxed types을 포함할 수 있습니다.

■ Elementary type
Elementary type은 해당 유형이 기술 및 의미론적 특성을 취할 수 있는 Data Element를 참조하여 정의하거나, 수동으로 데이터 유형, 길이 및 소수점을 할당한 predefined type을 참조하여 정의할 수 있습니다.

■ Reference type
이러한 유형은 데이터 참조 또는 객체 참조로 정의할 수 있습니다. 데이터 참조는 데이터 참조를 정의하는 Data Element를 사용하거나 predefined ABAP Data Dictionary type, 길이 및 소수점을 사용하여 지정할 수 있습니다.

객체 참조는 전역 클래스나 인터페이스 참조를 갖는 Data Element를 사용하여 지정할 수 있습니다.

■ Boxed type
이러한 유형은 SAP NetWeaver 7.0 EHP 2부터 Structure에 정의할 수 있습니다. 박스 유형은 ABAP 프로그램의 메모리 풋프린트를 줄이고 성능을 향상시키는 데 도움이 됩니다. 박스 유형을 사용하면 시스템이 초기 메모리를 할당하지 않습니다. 메모리는 하나의 Structure에 할당되고, 해당 유형의 모든 데이터가 해당 메모리를 가리킵니다. 이는 elementary types의 Structure와 달리 각 유형의 각 데이터 객체가 고유한 초기 메모리 공간을 차지하는 것과 달리 초기 값 공유( initial value sharing)라고도 합니다. 이 유형을 사용하는 여러 데이터 객체간에 메모리가 공유됩니다.

Reference type은 초기 메모리 공간을 사용하지 않으므로, Boxed type은 Elementary type과 Reference type 사이에 위치합니다. 다시 말해, Boxed type의 초기 메모리는 Elementary type보다는 낮지만 Reference type보다는 높습니다.

현재로서는 Static Box만 지원됩니다. Static types은 구성 요소가 정적으로 알려진 박싱된 구성 요소입니다. Structure의 하위 Structure이나 클래스 또는 인터페이스의 속성 중 일부만 박싱된 것으로 정의할 수 있습니다. Boxed type은 프로그램에서 TYPES 문에 BOXED를 추가하여 정의됩니다. 이는 아래 코드에도 나와 있습니다.

TYPES : BEGIN OF ty_lfa1
	Lfa1 TYPE lfa1 BOXED,
		END OF ty_lfa1.

Boxed type의 효율성은 초기 값 공유(initial value sharing)에 기인합니다. 초기 값 공유(initial value sharing)는 동일한 데이터의 모든 발생을 동일한 초기 메모리를 참조하도록 하는 것입니다. 그러나 다음과 같은 상황에서 초기 값 공유가 해제됩니다.

1. static box나 그 구성 요소에 쓰기 접근이 이루어집니다.
2. static box나 그 구성 요소가 필드 심볼에 할당됩니다.
3. static box나 그 구성 요소가 데이터 참조를 사용하여 참조됩니다.
4. static box나 그 구성 요소가 프로시저의 실제 매개 변수로 사용됩니다.

초기 값 공유(initial value sharing)가 취소된 후에는  internal reference가 구조체의 인스턴스를 참조합니다.
Boxed types은 한 번 이상 사용되는 structure의 메모리 요구 사항을 줄입니다. 예를 들어, Internal Table에 Substructure가 있는 경우 각 행은 초기 상태이더라도 메모리 저장소를 증가시킵니다. Substructure가 Boxed types으로 정의된 경우 각 행은 읽기 액세스만 허용되는 한 동일한 초기 메모리를 가리킬 수 있으므로 여러 메모리 저장소가 필요하지 않습니다.아래 그림은 디버거 창에서 표시된대로 normal types, boxed types, and reference types을 사용하여 structure의 초기 메모리 할당을 보여줍니다.

아래 구문에서는 동일한 타입의 객체가 반복될 때 개별적으로 메모리가 할당되는 방식을 강조하기 위해 각 타입의 세 개의  structure를 정의했습니다.

*Normal type
TYPES : BEGIN OF ty_kna1,
 kna1 TYPE kna1,
END OF ty_kna1.

*Boxed type
TYPES : BEGIN OF ty_kna1_b,
 kna1 TYPE kna1 BOXED,
END OF ty_kna1_b.

*Data declarations using normal type
DATA : st_kna1_1 TYPE ty_kna1.
DATA : st_kna1_2 TYPE ty_kna1.
DATA : st_kna1_3 TYPE ty_kna1.

*Data declarations using boxed type
DATA : st_kna1_b_1 TYPE ty_kna1_b.
DATA : st_kna1_b_2 TYPE ty_kna1_b.
DATA : st_kna1_b_3 TYPE ty_kna1_b.

*Data declaration using reference type
DATA : st_kna1_o_1 TYPE REF TO ty_kna1.
DATA : st_kna1_o_2 TYPE REF TO ty_kna1.
DATA : st_kna1_o_3 TYPE REF TO ty_kna1.

BREAK-POINT.

 

반응형

'ABAP 프로그래밍 개념 > ABAP Data Dictioanry' 카테고리의 다른 글

4. Type Group  (0) 2023.06.01
3.3 Table Types  (0) 2023.06.01
3.1 Data Elements  (0) 2023.05.30
3. Data Type  (0) 2023.05.30
2.5 ABAP Core Data Services Views  (0) 2023.05.29