ABAP 프로그램을 짜다가 VRM_VALUES, SLIS_T_FIELDCAT_ALV, ICON_OKAY 같은 타입·상수를 만나면 "어디서 선언된 거지" 싶은 순간이 옵니다. 이런 식별자들은 대부분 TYPE GROUP(또는 TYPE POOL) 이라는 곳에 모아둔 공용 타입·상수 입니다.
TYPE GROUP 은 모듈별로 자주 쓰는 타입과 상수를 한 묶음으로 만들어 두고, 프로그램마다 같은 정의를 반복 선언하지 않아도 되게 해주는 ABAP 표준 메커니즘입니다. SAP 가 미리 만들어 둔 공식 TYPE GROUP 도 많고, 자체적으로 모듈 공용 타입을 모아 Z TYPE GROUP 으로 만들어 쓰는 경우도 있습니다.
이 글은 TYPE GROUP / TYPE-POOL 의 개념과 사용 절차, 자주 쓰이는 표준 TYPE GROUP 목록, 그리고 ABAP 7.40 이후 deprecation 관련 주의 사항 까지 정리한 메모입니다.
핵심 — TYPE GROUP 은 공용 타입·상수의 묶음입니다
TYPE GROUP 은 트랜잭션 SE11 에서 만드는 DDIC 오브젝트의 한 종류로, 안에 TYPES 와 CONSTANTS 만 들어갈 수 있습니다. 프로그램에서는 TYPE-POOLS <그룹명>. 한 줄 만으로 그 그룹의 모든 정의를 통째로 가져와 사용합니다.
| 항목 | TYPE GROUP / TYPE POOL | 일반 Structure / Data Element |
|---|---|---|
| 담는 내용 | 여러 개의 TYPES + CONSTANTS 묶음 |
단일 타입 / 단일 구조 정의 |
| 생성 위치 | SE11 → Type Group | SE11 → Database Table / Structure / Data Element |
| 프로그램에서 사용 | TYPE-POOLS vrm. 한 줄 선언 후 그룹 안 모든 정의 즉시 사용 |
필요한 것만 TYPE 로 직접 참조 |
| 이름 규칙 | 최대 5글자 (예: VRM, SLIS, ICON) |
최대 30글자 (일반 DDIC 이름 규칙) |
| 내부 식별자 prefix | 그룹명을 prefix 로 시작해야 함 (VRM_VALUE, VRM_VALUES) |
제약 없음 |
쉽게 비유하면, TYPE GROUP 은 자주 쓰는 도구를 한 칸에 모아둔 도구 상자입니다. 프로그램이 TYPE-POOLS vrm. 이라고 선언하면 그 상자를 통째로 작업대 위에 올려놓는 셈이고, 안에 있는 도구(타입·상수) 들을 모두 즉시 꺼내 쓸 수 있습니다.
1단계 — SE11 에서 TYPE GROUP 조회
표준 SAP 가 제공하는 TYPE GROUP 을 직접 열어보면 구조 이해에 도움이 됩니다. 가장 자주 마주치는 VRM(Value Request Manager — 화면 드롭다운 값 리스트용) 을 예로 봅니다.
SE11 → Type Group → 이름 입력 (예: VRM) → Display
→ Description : Value Request Manager: Typen und Konstanten
→ 소스코드 탭에서 TYPE-POOL 정의 확인

소스코드 탭을 열면 다음과 같은 내용이 보입니다.
TYPE-POOL vrm.
TYPES:
BEGIN OF vrm_value,
key(40) TYPE c,
text(80) TYPE c,
END OF vrm_value,
vrm_values TYPE vrm_value OCCURS 0,
vrm_id TYPE vrm_value-text,
vrm_ids TYPE vrm_id OCCURS 0,
BEGIN OF vrm_queuerow,
tag,
value TYPE vrm_value,
END OF vrm_queuerow,
vrm_queue TYPE vrm_queuerow OCCURS 0.
CONSTANTS:
vrm_type(20) VALUE 'application',
vrm_subtype(20) VALUE 'x-sapvaluesets',
vrm_queue_tag_header VALUE 'T',
vrm_queue_tag_subheader VALUE 'X',
vrm_queue_tag_entry VALUE ' ',
vrm_queue_key_type TYPE vrm_value-key VALUE 'TYPE',
vrm_queue_key_name TYPE vrm_value-key VALUE 'NAME'.

이 한 파일 안에 7개의 타입과 7개의 상수가 모여 있습니다. 프로그램에서 TYPE-POOLS vrm. 한 줄만 적으면 위 14가지를 즉시 사용할 수 있습니다.
2단계 — ABAP 프로그램에서 TYPE-POOLS 선언과 사용
선언 신택스는 단순합니다. 프로그램 시작부 (보통 REPORT 직후) 에 한 줄 추가하면 됩니다.
REPORT z_dropdown_demo.
TYPE-POOLS: vrm. " VRM 타입 그룹 사용 선언
DATA: lt_values TYPE vrm_values, " ← VRM 그룹의 타입을 그대로 사용
ls_value TYPE vrm_value.
ls_value-key = '01'. ls_value-text = '냉장'. APPEND ls_value TO lt_values.
ls_value-key = '02'. ls_value-text = '냉동'. APPEND ls_value TO lt_values.
ls_value-key = '03'. ls_value-text = '상온'. APPEND ls_value TO lt_values.
" PBO 시점에 화면 필드에 드롭다운 값 세팅
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_STORE'
values = lt_values
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
핵심 포인트:
TYPE-POOLS vrm.선언 없이 곧바로DATA lt TYPE vrm_values.를 쓰면 컴파일 에러가 납니다(구버전 ABAP 기준).- 여러 그룹을 한 번에 선언할 수 있습니다:
TYPE-POOLS: vrm, slis, icon. - 선언 위치는 가능한 한 프로그램 최상단입니다. INCLUDE 안에서 선언해도 작동하지만 가독성을 위해 메인 프로그램 상단을 권장합니다.
3단계 — 자주 쓰이는 표준 TYPE GROUP
실무에서 자주 등장하는 표준 TYPE GROUP 들입니다. 이름만 알아도 코드를 읽을 때 어디서 온 식별자인지 바로 파악됩니다.
| 그룹 | 용도 | 대표 식별자 |
|---|---|---|
VRM |
Dynpro 드롭다운 값 리스트 (Value Request Manager) | vrm_value, vrm_values |
SLIS |
REUSE_ALV_* 계열 ALV 출력 (필드카탈로그·레이아웃·이벤트) | slis_t_fieldcat_alv, slis_layout_alv, slis_t_event |
ICON |
SAP GUI 아이콘 상수 (체크·경고·삭제 등) | icon_okay, icon_message_error, icon_delete |
COL |
WRITE / ALV 색상 코드 | col_positive, col_negative, col_total |
SYM |
WRITE 출력용 심볼 상수 (♠ ♣ ♥ 등) | sym_phone, sym_diamond |
ABAP |
기본 ABAP 타입·boolean 상수 (자동 포함, 별도 선언 불필요) | abap_true, abap_false, abap_bool |
KKBLO |
CO 계열 리포트의 List Output (구식 — 거의 SLIS 로 대체됨) | kkblo_t_fieldcat |
ALV 예시 (SLIS):
REPORT z_alv_demo.
TYPE-POOLS: slis. " ALV 표준 타입 그룹
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-seltext_m = '자재 번호'.
APPEND ls_fieldcat TO lt_fieldcat.
ls_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_data.
아이콘 예시 (ICON):
TYPE-POOLS: icon.
WRITE: / icon_okay AS ICON, '정상',
/ icon_message_error AS ICON, '오류',
/ icon_delete AS ICON, '삭제'.
4단계 — 자체 Z TYPE GROUP 생성 (옵션)
모듈에서 반복 사용하는 타입·상수가 5~10개 이상 쌓이면 자체 Z TYPE GROUP 으로 묶어두는 것이 유지보수에 좋습니다.
SE11 → Type Group → 이름 ZXXMM (최대 5글자) → Create
→ Short Description: "MM 모듈 공용 타입 그룹"
→ 소스코드 탭 → TYPES / CONSTANTS 작성
→ 저장 + 활성화
TYPE-POOL zxxmm.
TYPES:
BEGIN OF zxxmm_po_summary,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
lifnr TYPE ekko-lifnr,
netwr TYPE ekpo-netwr,
waers TYPE ekko-waers,
END OF zxxmm_po_summary,
zxxmm_t_po_summary TYPE STANDARD TABLE OF zxxmm_po_summary.
CONSTANTS:
zxxmm_status_open TYPE c LENGTH 1 VALUE 'O',
zxxmm_status_closed TYPE c LENGTH 1 VALUE 'C',
zxxmm_status_blocked TYPE c LENGTH 1 VALUE 'B'.
내부 식별자(zxxmm_*) 는 그룹명 prefix 로 시작해야 활성화가 성공합니다. MY_TYPE 같은 prefix 안 맞는 이름은 컴파일 에러를 일으킵니다.
ABAP 7.40 이후 — TYPE-POOLS 는 의무가 아닙니다
ABAP 7.40 부터 TYPE-POOL 안에 정의된 타입·상수는 TYPE-POOLS 선언 없이도 전역적으로 사용 가능 합니다. 즉, 아래 두 코드는 7.40+ 환경에서 동일하게 작동합니다.
" 구버전 신택스 — 명시적 선언
TYPE-POOLS: vrm.
DATA lt TYPE vrm_values.
" 7.40+ 신택스 — TYPE-POOLS 생략 가능
DATA lt TYPE vrm_values.
다만 신규 코드는 TYPE GROUP 보다는 클래스/인터페이스의 TYPES · CONSTANTS 로 정의 하는 것이 권장됩니다. TYPE-POOLS 는 호환성을 위해 남아있지만 더 이상 새로 만들 객체로는 권장되지 않습니다.
| 상황 | 권장 방식 |
|---|---|
| 기존 표준 그룹(VRM·SLIS·ICON) 사용 | TYPE-POOLS 선언 그대로 사용 (가독성·호환성 위해 7.40+ 에서도 명시 권장) |
| 신규 모듈 공용 타입 만들기 | Z 클래스 또는 Z 인터페이스에 TYPES · CONSTANTS 로 정의 (OO 표준) |
| 레거시 프로그램 유지보수 | 기존 TYPE-POOL 유지, 새 정의 추가도 같은 그룹에 (일관성 우선) |
흔히 빠뜨리는 함정
그룹명 prefix 규칙 위반
Z TYPE GROUP 안에 정의하는 모든 타입·상수는 그룹명을 prefix 로 시작해야 합니다. ZXXMM 그룹에 MY_STATUS 같은 이름을 넣으면 활성화 시 에러가 발생합니다.
TYPE-POOLS 선언 누락
구버전 ABAP(7.40 미만) 에서는 TYPE-POOLS vrm. 없이 곧바로 DATA TYPE vrm_values 를 쓰면 컴파일 에러가 납니다. ECC 6.0 미만 시스템을 다룬다면 명시적 선언을 유지합니다.
그룹명 길이 5글자 초과
TYPE GROUP 이름은 최대 5글자 입니다. ZMMCOMMON 같은 긴 이름은 만들 수 없습니다. 모듈 약어 + 짧은 식별자 조합(ZXXMM) 으로 명명합니다.
TYPE GROUP 에 변수(DATA) 정의 시도
TYPE GROUP 안에는 TYPES 와 CONSTANTS 만 들어갈 수 있습니다. DATA 변수 선언은 불가능합니다. 공용 변수가 필요하면 클래스의 CLASS-DATA 로 가야 합니다.
새 TYPE-POOL 을 굳이 만들기
7.40+ 환경에서 신규 모듈 공용 타입을 정의할 때 TYPE-POOL 부터 만들면 시대 흐름에 역행하는 선택입니다. 가능하면 Z 클래스 또는 Z 인터페이스의 정의를 사용해 OO 표준에 맞춥니다.
같은 이름이 표준 그룹과 충돌
자체 그룹의 식별자가 표준 SAP 식별자와 우연히 같으면 후행 선언이 우선 적용돼 의도하지 않은 타입을 가리킬 수 있습니다. Z prefix 를 반드시 유지하고, VRM_·SLIS_ 같은 SAP prefix 는 절대 차용하지 않습니다.
그룹 활성화 누락
소스코드만 수정하고 그룹 자체를 다시 활성화하지 않으면 변경 사항이 반영되지 않습니다. SE11 에서 소스 수정 후 Ctrl + F3(활성화) 을 항상 마지막에 수행합니다.
전체 코드 — 복사용 통합본
VRM 드롭다운 + SLIS ALV + ICON 상수 + 사용자 정의 ZXXMM 그룹을 모두 한 프로그램에서 사용하는 예시입니다. SE38 에 그대로 붙여 실행 가능합니다 (단, ZXXMM 그룹은 SE11 에서 사전에 만들어 둔 상태여야 합니다).
REPORT z_typepools_demo.
* ★ 사전 작업 — SE11 에서 ZXXMM 그룹을 만들어 두었다고 가정
* TYPES: zxxmm_status TYPE c LENGTH 1.
* CONSTANTS:
* zxxmm_status_open TYPE zxxmm_status VALUE 'O',
* zxxmm_status_closed TYPE zxxmm_status VALUE 'C'.
* 여러 TYPE GROUP 한 줄 선언
TYPE-POOLS: vrm, slis, icon.
* 1) VRM 드롭다운 값 준비
DATA: lt_vrm TYPE vrm_values,
ls_vrm TYPE vrm_value,
lv_state TYPE zxxmm_status.
ls_vrm-key = zxxmm_status_open. ls_vrm-text = '열림'. APPEND ls_vrm TO lt_vrm.
ls_vrm-key = zxxmm_status_closed. ls_vrm-text = '닫힘'. APPEND ls_vrm TO lt_vrm.
" 화면 필드 P_STATE 에 드롭다운 세팅 (PBO 모듈에서 호출)
* CALL FUNCTION 'VRM_SET_VALUES'
* EXPORTING id = 'P_STATE' values = lt_vrm.
* 2) SLIS ALV 필드카탈로그 + 레이아웃
DATA: lt_fcat TYPE slis_t_fieldcat_alv,
ls_fcat TYPE slis_fieldcat_alv,
ls_lay TYPE slis_layout_alv.
ls_fcat-fieldname = 'MATNR'. ls_fcat-seltext_m = '자재'. APPEND ls_fcat TO lt_fcat.
ls_fcat-fieldname = 'MAKTX'. ls_fcat-seltext_m = '자재명'. APPEND ls_fcat TO lt_fcat.
ls_lay-zebra = abap_true.
* 3) ICON 상수로 상태 출력
WRITE: / icon_okay AS ICON, '정상',
/ icon_message_error AS ICON, '오류',
/ icon_delete AS ICON, '삭제'.
* 4) 사용자 정의 그룹 상수 사용
lv_state = zxxmm_status_open.
WRITE: / 'Status:', lv_state.
* REUSE_ALV_GRID_DISPLAY 호출 부분은 실 데이터 테이블이 있을 때 추가
요약
| 단계 | 작업 | 핵심 |
|---|---|---|
| 1 | SE11 Type Group 조회 | 소스코드 탭에서 TYPE-POOL + TYPES + CONSTANTS 확인 |
| 2 | 프로그램 선언 | TYPE-POOLS: vrm, slis, icon. 한 줄 |
| 3 | 표준 그룹 활용 | VRM(드롭다운) · SLIS(ALV) · ICON(아이콘) · COL(색상) |
| 4 | 자체 Z 그룹 생성 | 최대 5글자 이름 + 식별자 prefix 일치 + 활성화 |
| 5 | 7.40+ 권장 | 신규 정의는 Z 클래스 / 인터페이스의 TYPES · CONSTANTS 로 |
TYPE GROUP 은 한 곳에 모아둔 공용 타입·상수 도구 상자입니다. 표준 SAP 가 제공하는 VRM · SLIS · ICON 같은 그룹은 ABAP 코드 어디서나 만나는 식별자이므로, TYPE-POOLS 선언으로 한 번에 끌어오는 패턴을 기억해 두면 코드 읽기가 훨씬 수월해집니다. 신규 모듈 공용 타입을 만들 때는 ABAP 7.40+ 시점부터 Z 클래스 · 인터페이스의 TYPES 와 CONSTANTS 가 표준 방식이므로, 신규 TYPE-POOL 생성보다는 그쪽으로 우선 고려합니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.
TYPE-POOL · TYPE-POOLS 키워드와 VRM · SLIS · ICON · COL · SYM · ABAP 표준 TYPE GROUP 은 SAP NetWeaver 표준 기능으로 시스템 버전 의존 없이 동작합니다. ABAP 7.40 이상에서는 TYPE-POOL 안 식별자가 명시적 TYPE-POOLS 선언 없이도 인식되지만, 가독성·구버전 호환성을 위해 선언을 유지하는 것이 권장됩니다. 신규 공용 타입·상수는 클래스 또는 인터페이스의 TYPES · CONSTANTS 로 정의하는 것이 SAP 의 표준 가이드라인입니다. TYPE GROUP 이름은 최대 5글자, 내부 식별자는 그룹명 prefix 로 시작해야 하는 제약은 시스템 버전과 무관하게 동일하게 적용됩니다.