본문 바로가기
ABAP 문법 & 기법

[SAP ABAP] TYPE-POOLS와 TYPE GROUP 사용법 — VRM·SLIS·ICON 표준 그룹 + 7.40 권장 방식

by Song.sh 2026. 5. 18.

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 오브젝트의 한 종류로, 안에 TYPESCONSTANTS 만 들어갈 수 있습니다. 프로그램에서는 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 안에는 TYPESCONSTANTS 만 들어갈 수 있습니다. 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 클래스 · 인터페이스의 TYPESCONSTANTS 가 표준 방식이므로, 신규 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 로 시작해야 하는 제약은 시스템 버전과 무관하게 동일하게 적용됩니다.