본문 바로가기

ABAP 프로그래밍 개념/ABAP Dynamic Programming(동적 프로그래밍)

7. ABAP 동적 프로그래밍 : Dynamic Program Generation

앞서서 1번부터 6번글에서 논의한 ABAP 프로그램안에서 사용되는 동적 프로그래밍 개념에 따르면, ABAP 프로그램도 동적으로 실행할 수 있습니다. 프로그램을 동적으로 생성하는 것은 다른 동적 프로그래밍 기술이 요구 사항을 충족하지 않는 경우에서 최후의 수단으로 사용해야 합니다.

Dynmaic Program Generation은 숙력된 개발자를 위한 것이며, 정확히 무엇을 하는지 이해를 못할 때 심각한 문제를 일으킬 수 있다는 주의와 함께 사용됩니다. 동적으로 생성되는 프로그램의 단점들은 보통의 프로그램처럼 테스트할 수 없다는것과 심각한 보한 위험에 관여될 수 있다는 것입니다.

동저으로 생성될 프로그램에는 두 가지 종류가 있습니다.

1. Trasient Program
Trasient Program은 Internal Session 메모리에 일시적으로 존재하고, 현재 Internal Session으로부터만 접근 가능합니다. GENEREATE SUBROUTINE POOL itab NAME prog라는 구문은 일시적인 subroutine pool program을 만드는 데 사용됩니다. 인터널 테이블 itab은 character 타입이어야하고 프로그램의 소스코드를 담고 있어야합니다. prog라는 변수는 접근될 프로그램의 이름을 담고 있어야합니다.

생성된 Subroutine Pool Program은 프로그램의 외부로부터 접근될 수 있는 로컬 클래스와 서브루틴들을 담을 수 있습니다. 만약 프로그램의 소스 코드가 Syntax Error를 포함하고 있다면, 프로그램은 생성되지 않을 것입니다.

DATA: it_source TYPE TABLE OF string,
      program TYPE string ,
	  mesg TYPE string.

APPEND 'PROGRAM.' TO it_source.
APPEND 'FORM subr.' TO it_source.
APPEND 'WRITE / ''This is dynamic subroutine''.' TO it_source.
APPEND 'ENDFORM.' TO it_source.

GENERATE SUBROUTINE POOL it_source NAME program MESSAGE mesg.
 
 IF sy-subrc = 0.
  PERFORM subr IN PROGRAM (PROGRAM).
 ENDIF.

위 예시를 보면, Temporary Subroutine Pool Program을 만든 소스 코드를 볼 수 있습니다. Subroutine Pool Program의 소스 코드와 함께 인터널 테이블 IT_SOURCE를 만들고, GENERATE SUBROUTINE POOL 구문을 통해 프로그램을 실행하였습니다.

2. Persistent Progrm

Persistent Program은 Respository에 영구적으로 존재하며, 일반적으로 생성되는 다른 프로그램과 같이 접근할 수 있습니다. INSERT REPORT prog FROM itab 구문은 영구적인 프로그램을 생성합니다. 여기서 itab은 프로그램의 소스코드를 가지고 있고, prog 변수는 프로그램 이름을 담고 있습니다.

이 구문은 조심해서 사용해야되는데 왜냐하면, 만약 같은 이름의 프로그램이 이미 존재한다면, 어떠한 경고없이 Overwritten 될 것이기 때문입니다. 존재하는 프로그램을 Overwrite하지 않기 위해서, TRDIR 테이블을 통해 이미 존재하는 프로그램명인지 확인하는 것을 권장합니다.

DATA: it_source TYPE TABLE OF rssource-line.

APPEND 'REPORT ZDYN_EXAMPLE.' TO it_source.
APPEND 'WRITE / ''This program is generated dynamically''.' TO it_source.

INSERT REPORT 'ZDYN_EXAMPLE' FROM it_source.

위 예시를 보면, 동적으로 프로그램을 실행하는 예시입니다. IT_SOURCE라는 인터널 테이블을 소스코드로 한줄한줄 채우고 INSERT REPORT라는 키워드를 동해 프로그램을 실행하였습니다.

프로그램을 동적으로 생성하기 위해서, 프로그램을 정적으로 생성하고 해당 프로그램을 템플릿으로 사용하여 새 프로그램을 생성하는 것이 좋습니다.

READ REPORT INTO itab 구문을 통해 시스템에 존재하는 프로그램의 소스코드를 읽을 수 있습니다.

반응형