BAdI 구조와 문법 정리: GET BADI, CALL BADI, 필터와 폴백 클래스
3줄 요약
BAdI는 SAP 표준 소스를 직접 수정하지 않고 기능을 확장하는 방법이에요.
GET BADI로 사용할 구현을 선택하고 CALL BADI로 해당 메서드를 호출해요.
단일 사용과 다중 사용은 구현 개수와 파라미터 제약이 달라요. 구현을 찾지 못했을 때 사용할 폴백도 확인하세요.
어떤 상황에서 쓰나요
SAP 표준 소스를 직접 수정하지 않고 회사에 필요한 기능을 추가할 때 BAdI를 사용할 수 있어요. 이번 글에서는 BAdI의 정의와 구현이 어떻게 연결되는지 알아보고, 필터로 구현을 고른 뒤 GET BADI·CALL BADI로 호출하는 흐름을 살펴봐요.
BAdI는 표준 프로그램을 직접 고치는 대신 정해진 확장 지점에 구현을 연결하는 방식입니다. 아래 그림의 소켓처럼 확장 지점과 회사별 구현을 구분하고, 필요한 경우 필터로 사용할 구현을 고릅니다.
핵심 내용
BAdI의 구성 요소
BAdI 인터페이스: 확장 기능에서 구현할 메서드를 정의해요.
IF_BADI_INTERFACE태그 인터페이스를 포함해야 하고, 변수 속성은 선언할 수 없어요.BAdI 구현 클래스: 런타임에 객체 플러그인으로 기능을 확장하는 인스턴스를 만들어요. 한 BAdI에 여러 구현을 연결할 수 있어요.
속성
필터: 필터 이름과 기본 데이터 타입을 연결해 호출자가 필터 값으로 쓸 구현을 고르게 해요.
단일/다중 사용: 단일 사용은 내부 세션에서 하나의 구현만 쓰고 구현이 하나 이상 있어야 해서, 구현을 못 찾을 때를 대비한 폴백 클래스를 지정하고 구현하길 권해요. 다중 사용은 여러 구현을 연결하거나 구현 없이 사용할 수 있어서 여러 기능을 실행할 수 있어요. 대신 메서드의 파라미터 인터페이스에는 importing과 changing만 둘 수 있어요. 여러 구현이 실행되니 출력 파라미터가 하나일 수 없고, changing은 기존 데이터를 순서대로 고치는 용도라는 설명이에요. 단일 사용 BAdI의 메서드에는 출력 파라미터를 쓸 수 있어요.
인스턴스화: 새 인스턴스 생성, 인스턴스 재사용, 컨텍스트 의존 인스턴스화(
IF_BADI_CONTEXT필요).BAdI 메서드는 ABAP 프로그램에서 오직 BAdI 객체를 통한
CALL BADI로만 호출할 수 있어요.
만들 때의 순서 (치트시트 데모, ADT 에서)
BAdI 확장 스팟(컨테이너)
BAdI 정의: 다중 사용 여부, 폴백 사용 여부, 필터(예:
OPERATOR, 타입 Character) 설정BAdI 인터페이스(
IF_BADI_INTERFACE포함, 메서드 정의)폴백 클래스(인터페이스 구현)
BAdI 확장 구현(컨테이너)과 그 안의 BAdI 구현(구현 클래스, 필터 조합)
호출하는 쪽 문법
DATA badi_b TYPE REF TO zbadi_demo_abap_calculator.
GET BADI badi_b FILTERS operator = '-'.
CALL BADI badi_b->calculate
EXPORTING num1 = 10 num2 = 8
RECEIVING result = DATA(res).GET BADI: BAdI 객체를 만들어 참조 변수에 넣어요. 필터가 있으면FILTERS가 필수이고 없으면 쓸 수 없어요. 만든 뒤 활성 구현 클래스 중 필터 조건에 맞는 것을 찾고, 없으면 표준 구현, 그것도 없으면 폴백 클래스를 써요. 동적 형태는TYPE (이름)과FILTER-TABLE(타입badi_filter_bindings)을 쓰고 참조 변수의 정적 타입은CL_BADI_BASE여야 해요.CALL BADI: 참조 변수로 메서드를 호출해요. 동적 형태는->(method_name)과PARAMETER-TABLE(타입abap_parmbind_tab)이 있어요.GET BADI와CALL BADI는 잡을 수 있는 예외를 일으킬 수 있어요.
주의할 점
이 편은 커널 기반 BAdI 개념을 다뤄요. 클래식 ABAP에 있던 옛 BAdI(
CL_EXITHANDLER방식 등)는 다루지 않아요. 기존 시스템의 확장 포인트가 어느 쪽인지 확인하세요.데모 BAdI는 의미 없는 단순 예제이고, 실제 설계의 모범이 아니라고 치트시트가 밝혀요.
치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2025년 12월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/35_BAdIs.md
출처와 이용 안내
원문: ABAP Cheat Sheets - Enhancements Using BAdIs · 작성자 SAP SE and contributors SAP-samples · 작성일 2025-12-18 · 기준 릴리스에 따라 다름 원문은 커널 기반 BAdI 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기