쌓고 쌓다
[ABAP] RTTS (RunTime Type Service) 본문
RTTS
RTTS는 RunTime Type Service이다.
프로그램 실행중에 데이터의 타입 정보를 얻거나, 데이터의 타입을 동적으로 생성을 돕는 클래스이다.
RTTS로 RTTI와 RTTC가 있다.
1. RTTI (RunTime Type Identification) - 타입 정보 얻기
이미 존재하는 데이터를 가지고 타입 정보를 얻는다.
2. RTTC (RunTime Type Creation) - 타입 생성
프로그램 실행 도중에 사전에 정의하지 않은 새로운 타입을 생성함.
그냥 타입 추론과 생성 기능이 있다고 간단하게 생각하자~

CL_ABAP_TYPEDESCR 클래스를 사용하는데
위의 구조를 갖는다.
예제 코드

DESCRIBE_BY_DATA
변수 GT_DATA와 GS_DATA를 사용했을때 차이를 보자.
1. GT_DATA 변수

GO_TYPEDESCR 변수에 여러 필드가 존재하지만 CL_ABAP_TYPEDESCR 필드에 값을 보면
타입 종류 KIND에 T가 들어가 있고
T는 KIND_TABLE 테이블 타입임을 알 수 있다.
TYPE_KIND도 타입을 표현하는거 같은데
TYPE_KIND와 KIND 두개의 차이를 모르겠다 ㅎㅎ.
GO_TYPEDESCR 변수에 담긴 필드를 조금 더 내려보자.

CL_ABAP_TABLEDESCR 필드에 값이 담겨있다.
다른 STRUCT나 COMPLEXDESCR 필드도 아닌
CL_ABAP_TABLEDESCR 필드에 값이 들어있다.
왜냐. 값의 타입이 T라고 테이블 타입이라고 했으니
정보들이 CL_ABAP_TABLEDESCR 필드에 담겨 있는 것이다.
만약 구조체 타입이였다면 CL_ABAP_STRUCTDESCR 필드에 값이 들어 있을 것이다.
KEY 필드에는 이 테이블 타입이 어떤 필드를 키 값으로 구성되었는지도 알 수 있다.
2. GS_DATA 변수

GS_DATA 변수의 타입은 STRUCTURE 타입이다.
그래서 CL_ABAP_STRUCTDESCR에 값이 들어 있다.
이 구조체에 구성된 필드들도 COMPONENTS를 통해 알 수 있다.
계층 구조
자 이제 처음에 보여준 계층 구조에 대해 정리해보자.
GO_TYPEDESCR 변수는 CL_ABAP_TYPEDESCR 타입이다.
이 변수에 CL_ABAP_TYPEDESCR, CL_ABAP_TABLEDESCR, …, CL_ABAP_STRUCTDESCR 변수가 존재한다.

위의 계층 구조가 포함되어 있는 것이다.
우린 이제 테이블 정보냐 구조체 정보냐에 따라 CL_ABAP_TABLEDESCR, CL_ABAPSTRUCTDESC 변수에
담아서 필요한 메소드와 정보들을 사용하면 되는것이다.
변수에 담을때 다운캐스팅인지, 업캐스팅인지에 따라 = 또는 ?=를 사용한다.
DESCRIBE_BY_NAME
예제 코드에서는 DESCRIBE_BY_DATA로 이미 존재하는 데이터 오브젝트를 가지고 정보들을 뽑아냈다.
하지만 DESCRIBE_BY_NAME을 사용하면
로컬로 선언된 타입이나, DDIC에 선언된 STRUCTURE로 타입 정보들을 뽑아낼 수 있다.
다음 사진들은
DESCRIBE_BY_NAME( ‘TY_TYPE’ ).으로 호출했을때의 결과이다.

로컬로 선언한 'TY_TYPE' 타입은 구조체 타입임을 확인할 수 있다.

구조체 타입이므로 CL_ABAP_STRUCTDESC 필드에 정보가 담겨져 있다.

DDIC에 정의된 Deep Structure 타입도 다음과 같이 읽을 수 있다.

계층 구조를 이용해서 자유자재로 타입 변환을 해가며
타입 정보들을 얻을 수 있다.
입력 받은 DDIC Structure 이름으로 Internal Table 만들어보기


<GT_TABLE>에는 입력 받은 테이블명으로 Internal Table을 구성할 수 있다.
COMPONENTS로 구조체를 만들 수 있고
이 구조체로 또 TABLE 타입을 만들 수 있다.
이 TABLE 타입으로 동적 Internal Table을 만들 수 있다.
응용 - 필드 추가하고 삭제하기

응용해서 컴포넌트를가지고 Internal Table을 만드는 코드 중간에
컴포넌트들을 추가하건 삭제해서 Internal Table을 새롭게 구성할 수도 있다.
예를 들어 셀 색깔을 위한 'LVC_T_SCOL' 타입의 필드를 추가한다면

위와 같이 DDIC에 존재하는 'LVC_T_SCOL'이므로
DESCRIBE_BY_NAME을 통해서 추가할 수 있다.
값은 다음과 같이 접근해서 넣었다.


필드 카탈로그 만들기
테이블명을 한개 입력 받았을때
동적 Internal Table을 구성하고 필드 카탈로그를 만드는 로직이다.
복잡한 구조는 아니고 단 하나의 테이블일때만 이렇게 만들어봤는데
방법 1

방법 2

COMPONENTS들로 STRUCTURE를 만들었다면
그 구조를 READ_STRUCTDESC에 넘겨 필드 카탈로그를 뽑아낼 수 있다.
GO_STRUCTDESCR에 'LVC_T_SCOL'가 포함되어있지만
알아서 제외해준다.
셀 스타일 LVC_T_STYL

마찬가지로 LVC_T_STYL 컴포넌트를 끼워 넣고
동적 Internal Table을 생성하면 된다.


값 설정은 위와 같이 했다.
'SAP > ABAP' 카테고리의 다른 글
| CREATE_DYNAMIC_TABLE과 LVC_T_SCOL (0) | 2026.03.12 |
|---|---|
| [ABAP] HTML로 누적 막대 그래프 그려 넣기 (0) | 2026.02.27 |
| [ABAP] CREATE DATA, 동적 Internal Table에 Insert하기 (0) | 2026.01.09 |
| [ABAP] 동적 ALV 필드 구성 및 월별 주차 계산하기 (0) | 2026.01.03 |
| [ABAP] XML로 그래프 커스터마이징하여 그리기 (0) | 2025.12.28 |