- 개념: 

ABAP에서 반복되는 코드 블록을 이름 붙여서 재사용할 수 있게 해주는 기능/ 작은 템플릿 함수처럼 쓰이지만, 함수나 서브루틴과 다르게 컴파일 타임에 코드가 삽입된다.

DEFINE <macro_name>
	" 반복코드
END-OF-DEFINITION.

 

같은 WRITE문 여러번 쓰기

DEFINE show_line.
  WRITE: / '------------------------'.
END-OF-DEFINITION.

START-OF-SELECTION.

  WRITE: / 'Start'.
  show_line.
  WRITE: / 'Middle'.
  show_line.
  WRITE: / 'End'.

출력결과:

Start
------------------------
Middle
------------------------
End

 

매개변수 있는 MACRO예시

DEFINE print_name.
  WRITE: / 'Hello', &1.
END-OF-DEFINITION.

print_name 'Konie'.
print_name 'Wonie'.

Hello Konie
Hello Wonie

 

 

항목 PERFORM MACRO
🔧 정의 방식 FORM ... ENDFORM. DEFINE ... END-OF-DEFINITION.
🕐 처리 타이밍 런타임에 호출 컴파일 타임에 코드가 복붙됨
🧠 가독성/디버깅 잘됨 (단위 기능으로 분리, 디버깅 가능) 힘듦 (그냥 코드 복사라 디버깅 어려움)
🔁 재사용 가능성 높음 (다양한 값 전달, 구조 분리) 낮음 (단순 반복 코드 대체)
📦 매개변수 USING, CHANGING, RETURNING 등 지원 &1, &2 … 위치값만 사용
🧬 모듈화 가능성 높음 (다른 프로그램에도 INCLUDE 가능) 낮음 (로컬에 국한됨)
🚫 남용 시 문제 적음 (잘 정리됨) 많음 (가독성 ↓, 예외처리 어려움)
🧪 테스트/디버깅 좋음 (브레이크포인트 가능) 어려움 (브레이크포인트 안 됨)

 

 

그래도 너무 헷갈리는 PERFORM VA MACRO

- PERFORM은 논리단위를 정의하고 호출

- MACRO는 문자열 대체다. (반복적인 구문에 유용함)

- 조건문, 반복문, 로직, 데이터베이스, 유지보수가 중요한 경우에는 PEFRORM을 써야한다!

 

Global-Macro

I

INCLUDE해서 Global Macro받아오면 되는데, 처음에 이렇게 했을 때는 오류가 났다.

그 이유는 바로,

"Each ABAP program can contain only one "REPORT", "PROGRAM", or "FUNCTION-POOL" statement."

이 에러때문이였는데, 하나의 아밥 프로그램에서는 report를 한번만 해야하는데, MACRO에서 report하고 있기 때문.

지우니까 바로 결과물이 잘 나오는 것을 확인할 수 있었다!

 

+ Recent posts