본문 바로가기

ABAP 프로그래밍 개념/Modulazation Technique

2-2. Modularization Techniques - Program Structure : Event Blocks

Event Block은 event 키워드를 통해서 프로그램에 도입됩니다. 각 Event들은 구체적인 키워드를 가지고 있는데, Event 키워드를 프로그램에서 사용하여 해당 Event에 대해 반응하도록 만들 수 있습니다. Event가 ABAP 런타임 환경에 의해 발생했을 때(triggered), Event 키워드 아래있는 코드들이 실행됩니다.

Event Block은 특정한 명시적인 Keyword를 통해 끝나는 것이 아닌, 다음 Processing Block 이 시작될 때 암시적으로 종료됩니다. 그러므로, Procedure와 달리, Event Block을 명시적으로 끝내기 위하여 어떠한 END 구문도 사용할 필요가 없습니다.

Event Block은 프로그램 내부에서만 사용되며, ABAP 문장을 사용하여 프로그램적으로 호출될 수 없습니다. ABAP 런타임 환경에서 발생하는 Event에 의해 항상 트리거됩니다. 이들은 로컬 데이터나 Parameter Interfacae를 지원하지 않습니다. Event Block 안에서 어떠한 선언적인 구문을 사용할 때면, 시스템은 Syntax Error를 던지지는 않고 해당 선언적인 구문을 전역 선언으로 다룰 것입니다.

ABAP 프로그램의 Event Block이 적절하게 유지되면 ABAP 런타임 환경의 Event가 발생할 때 해당 Event Block의 코드가 실행되며, 그렇지 않으면 Event는 무시됩니다. 반대로, Event Block 내의 코드는 프로그램이 실행되는 동안 해당 Event가 발생하지 않으면 실행되지 않습니다.다른 말로는, 프로그램에서 Event Block을 유지했다고 해서 반드시 실행되는 것은 아닙니다. 해당 Event가 프로그램이 실행 중일 때 트리거되어야만 실행됩니다.


예를 들어, AT LINE-SELECTION이라는 Event는 유저가 List 스크린 상의 결과 중 어떠한 라인에 더블클릭을 해야 트리거됩니다. 만약 더블 클릭 Event에 반응하는 프로그램을 만들고 싶다면, 해당 Event 키워드를 프로그램에 사용하고 해당 이벤트에 대응하는 코드를 작성하여야 합니다. 

유저가 라인에 더블 클릭을 하였을 때, AT LINE-SELECTION 하기에 있는 코드는 실행될 것입니다. 그러나, 만약 유저가 더블 클릭을 하지 않는다면 해당 코드는 절대 실행되지 않을 것입니다.


Dialog Module


 Dialog Moudle은 Executable Program, Module Pool, Function Group(MODULE~ENDMODULE 사이에서) 에서 실행됩니다. Dialog Module은 Dialog(Screen)을 이용할 때 사용합니다. Executable Program, Module Pool, Function Group 들 만이 Screen 을 지원하는 프로그램이기 때문에, Diolog Module은 해당 프로그램에서만 사용한다는 것을 기억하는 것이 좋습니다.

더불어서 ABAP OBJECT로 Screen과 Module을 정의할 수 없다는 것을 알고 있어야 합니다. 개발자는 Dialog Module을 Screen이 정의된 메인 프로그램에서 사용가능하고, 이러한 Module을 MODULE 이라는 키워드를 사용하여 Screen Flow에서 호출 할 수 있습니다.

Event Block과 같이, Dialog Module도 Local Data Area가 없고 Parameter Interface가 불가능합니다. 그렇기 때문에 Dialog Module 안에서 선언한 데이터들도 Global Data로 추가될 수 있습니다.


Procedures


Procedure는 호출가능한 Processing Block입니다. 그 말인 즉슨, Procedure는 프로그램 안에서 ABAP 구문을 통해 호출될 수 있다는 것입니다. Procedure는 Parameter Interface라는 메커니즘을 지원하는데, 호출하는 프로그램에서 데이터를 Import & Export 할 수 있고, Local Data(로컬 데이터)를 포함할 수 있다는 것을 의미합니다. Procedure은 내적으로, 외적으로 호출될 수 있는데, 선언된 프로그램에서 호출하던가 혹은 다른 프로그램에서 호출할 수 있다는 것을 의미합니다.

Procedure의 주요 목적은 재사용가능한 소프트웨어 블록(Reusable software block)을 만드는 것 입니다. 예를 들어, 다양한 프로그램에서 많이 쓰일 특정한 기능이 필요할 때가 있습니다. 이러한 경우 단순하게 Procedure을 만들어서 같은 로직을 반복하여 코딩하는 것 대신에 필요한 장소에서 해당 Procedure을 호출하여 기능을 사용할 수 있습니다. SAP는 많은 스탠다드 Procedure( Function Module, Class 등..) 을 만들어서 프로그램에서 호출 될 수 있도록 하고 있습니다.

Procedure를 이해하는 것은 SAP가 제공하는 Resuable library에 사용에 이점을 주고 BAPI(Business Application Programming Interfaces), Foms, ALV와 같은 ABAP의 개발 컨셉에 대한 이해를 확립하는 것에 도움을 주기 때문에 중요합니다. 예를 들어, BAPI는 기술적으로 RFCs(Remote Function Calls)로서 실행되기 때문에, BAPI 개발을 위해서는 Funtion Module에 대한 이해가 필요합니다. 유사하게 ABAP Object에 대한 이해는 ALV Model를 통한 작업에 도움을 줍니다. 

반응형