바로투입이력카드
SAP 게시판

정보·팁

BAdI 구조와 문법 정리: GET BADI, CALL BADI, 필터와 폴백 클래스

에이든ABAP 개발자운영자모듈 MMSD기타조회 15

3줄 요약

  • BAdI(Business Add-In)는 표준 소스를 수정하지 않고 객체지향적으로 기능을 확장하는 방법이고, 정의(스팟, BAdI, 인터페이스)와 구현(구현 클래스)으로 나뉘어요.

  • BAdI 를 쓰는 쪽 코드는 GET BADI 로 객체를 만들고 CALL BADI 로 메서드를 불러요. 필터가 있으면 FILTERS 를 줘야 해요.

  • 단일 사용은 구현 하나, 다중 사용은 여러 구현이 병렬로 실행되고(제약 있음), 단일 사용에는 폴백 클래스를 권해요.

어떤 상황에서 쓰나요

"표준 프로그램에 로직을 끼워 넣고 싶다"는 요구에서 사용자 exit, 확장 BAdI 이야기가 나올 때 BAdI 가 어떻게 생겼는지 구조를 알면 편해요. 치트시트의 *Enhancements Using BAdIs* 편은 직접 만든 데모 BAdI 로 관련 ABAP 문법을 보여 줘요. 이 글은 그 구조와 문법의 요약이에요.

핵심 내용

BAdI 의 구성 요소

  • BAdI 인터페이스: BAdI 객체의 템플릿이에요. IF_BADI_INTERFACE 태그 인터페이스를 포함해야 하고, 변수 속성은 선언할 수 없어요.

  • BAdI 구현 클래스: 런타임에 객체 플러그인으로 기능을 확장하는 인스턴스를 만들어요. 한 BAdI 에 여러 구현을 연결할 수 있어요.

  • 속성

- 필터: 필터 이름과 기본 데이터 타입을 연결해 호출자가 필터 값으로 쓸 구현을 고르게 해요. - 단일/다중 사용: 단일 사용은 내부 세션에서 하나의 구현만 쓰고 구현이 하나 이상 있어야 해서, 구현을 못 찾을 때를 대비한 폴백 클래스를 지정하고 구현하길 권해요. 다중 사용은 여러 구현(또는 없음)이 병렬로 존재해서 여러 기능을 실행할 수 있어요. 대신 메서드의 파라미터 인터페이스에는 importing 과 changing 만 둘 수 있어요. 여러 구현이 실행되니 출력 파라미터가 하나일 수 없고, changing 은 기존 데이터를 순서대로 고치는 용도라는 설명이에요. 단일 사용 BAdI 의 메서드에는 출력 파라미터를 쓸 수 있어요. - 인스턴스화: 새 인스턴스 생성, 인스턴스 재사용, 컨텍스트 의존 인스턴스화(IF_BADI_CONTEXT 필요).

  • BAdI 메서드는 ABAP 프로그램에서 오직 BAdI 객체를 통한 CALL BADI 로만 호출할 수 있어요.

만들 때의 순서 (치트시트 데모, ADT 에서)

  1. BAdI 확장 스팟(컨테이너)

  2. BAdI 정의: 다중 사용 여부, 폴백 사용 여부, 필터(예: OPERATOR, 타입 Character) 설정

  3. BAdI 인터페이스(IF_BADI_INTERFACE 포함, 메서드 정의)

  4. 폴백 클래스(인터페이스 구현)

  5. 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

아직 댓글이 없어요.

정보·팁 목록전체 목록