쌓고 쌓다

[ABAP] 매크로 DEFINE 구문 본문

SAP/ABAP

[ABAP] 매크로 DEFINE 구문

승민아 2025. 12. 14. 21:48
반응형

유지보수하다가 이상한 코드를 발견했다..

 

아래와 같이 알 수 없는 단어 M_RANGE와 값들을 넘겨주는 것이다.

 

예를 들어 M_RANGE라는 매크로를 만들었다.

 

 

이건 무슨 구문일까?

 

매크로 구문이다.

 

서브루틴이랑 비슷하다고 보면 된다.

 

값을 넘겨주는 순서에 맞춰 파라미터를 저장하고

실행될 코드들을 정의하고 호출할 수 있다.

 

 

Local Macro

정의

TOP INCLUDE 부분에 위와같이 DEFINE ~ END-OF-DEFINITION 구문으로

매크로를 정의할 수 있다.

 

&1 &2 &3는 이 매크로를 호출할때 넘겨준 값들의 순서에 맞춰 사용한다.

호출

매크로를 사용할때는 위와 같이

M_RANGE 값1 값2 값3 값4 값5

형태로 호출하여 사용할 수 있다.

값의 순서에 따라 &1 &2 &3 ... 에 들어간다.

 

이것을 Range Variable에 적용하면 다음과 같이 개선할 수 있다.

 

Range Variable에 SIGN, OPTION, LOW에 값들을 넣고 할당하는 반복적인 부분을

 

위처럼 매크로를 사용함으로써 간단화할 수 있다.

 

위의 매크로 정의 방식은 Local 방식이다.

해당 프로그램에서만 사용이 가능한 매크로이다.

 

어떤 프로그램에서든지 호출하여 사용할 수 있는 Global Macro를 사용해 보자.

 

Global Macro

T-Code : SM30

 

TRMAC 테이블에 매크로를 한줄한줄

1번째줄, 2번째줄, ... 선언하여

하나의 매크로 구문을 작성하여 매크로를 선언할 수 있다.

 

예를 보자.

 

*로 주석을 추가할 수 있다.

0000번째 라인에는 어떤 매크로인지 주석으로 작성해 주었다.

 

작성했다면 다음 라인을 작성하면 된다.

 

위처럼 라인별로 실행할 코드를 작성해 주어

DEFINE ~ END-OF-DEFINITION 구문을 완성해 주면 된다.

 

Global Macro는 위와 같이 사용한다.

Local Macro를 사용하는 것과 차이가 없다.

 

매크로와 PERFORM 차이점

아니 서브루틴이랑 뭐가 다른 거지?

 

이지 아밥에서는

매크로 이름과 파라미터를 통해 호출할 수 있으며

PERFORM 구문이 로직을 포함한 재사용 가능한 모듈이라면,

매크로는 단순한 코딩 반복을 줄이기 위한 것으로 이해하자고 작성되어 있다.

 

프로그램을 디버깅할 때 매크로는 디버깅을 찍어볼 수 없기에 복잡한 로직을 넣거나,

무분별하게 사용하면 유지보수에 어려움이 존재한다.

 

SAP는 OOP를 지향하기 떄문에 매크로 사용을 지양하자.

 

매크로 안에서 또 다른 매크로를 호출할 수 있다.(자기 자신은 안된다)

 

속도차이는 없다. (동기 피셜)

 

CLEAR 해줄 때 Range 변수 초기화할 때 유용함.

 

단순하게 반복적이고 직관적인 부분은 Macro를 사용하면 좋을 것 같다.

반응형