본문 바로가기

ABAP 프로그래밍 개념/Object-Oriented ABAP

ABAP OOP : Polymorphism(다형성) PART6 : Events

객체의 런타임 동안 특정 이벤트가 발생할 때, (Event handler라고 불리우는) 특별한 Methods들은 특정한 이벤트들에 반응합니다. 이러한 상황에서 (trigger라고 불리우는) trigger 메소드에 의해 작동될 클래스 안에서 Events들은 정의될 수 있습니다. 

Event들(Events)은 클래스 내부에 정의되며 triggers라고 불리우는 method로부터 작동됩니다. 객체의 런타임 동안 특정한 이벤트가 발생하였을 때, Event Handler라고 불리우는 특수한 methods들이 정의된 Events에 반응합니다.

예를 들어,
1. 우리는 유저가 레포트 결과에서 더블클릭을 할 때 발생하는 메소드 중 하나로 클래스에서 double_click이라고 불리우는 Event를 정의할 수 있습니다.
2. 다른 메소드로, on_double_click은 double_click 이벤트가 trigger method에 의해 작동될 때 실행되도록 하기 위해서 double_click 이벤트를 위한 event_handler로 정의할 수 있습니다.

"즉, Events를 정의하고, 이 Events는 trigger method에 의해 작동됩니다. 그러면 Events가 작동될 때 이 이벤트의 역할에 맞게 반응하는 역할은 Event Handler Method가 합니다." Events를 구현하기 위해서는, 클래스 내부에 Events를 정의하고 trigger method를 정의하고, Event Handler를 정의하여야 합니다.

Event를 작동시키기 위해선(To trigger an event), Events는 클래스의 코드의 정의부(Definition part)에서 정의되있어야하고 클래스의 메소드 중 하나로 작동되어야 합니다.

Instace events는 EVENTS라는 키워드를 통해 정의됩니다, Static Events는 CLASS-EVENTS라는 키워드를 통해 정의됩니다. Static Event는 static과 instance methods 둘 다를 통해 작동될 수 있지만, Instance Events는 오직 instance method를 통해서만 작동됩니다.

Events는 Events가 작동될 때 Event Handler Method에게 전달될 exporting 파라미터(매개변수)를가질 수 있습니다. Event를 작동시키기 위해서는 RAISE EVENT event_name이라는 구문이 클래스의 메소드 중 하나에서 사용되어야합니다.

Event Handlers는 특별한 Method들로 Event에 대한 반응(역할)합니다. Event Handler methods는 구체적인 Event를 위한 Method로서 클래스의 Definition Part에 정의됩니다. 이러한 Event Handler Method를 정의하기 위한 구문으로는 METHODS method_name FOR EVENT event_name OF class_name을 사용합니다. 만약 event가 정의된 exporting parameter을 가지고 있다면, event handler는 해당 exporting parameter중 nonoptional(필수)인 parameter는 import 해야합니다. 모든 Instance Events는 함축적으로 sender parameter를 가지고 있으며 이것은 event handler에 import 됩니다. sender parameter는 이벤트가 정의된 sender 객체에 대한 참조를 포함하고 있습니다. 즉, Event가 정의된 객체에 대한 정보를 sender는 가지고 있다고 생각하면 됩니다. Event Handler로 Static Method를 정의하고 싶으면, CLASS-METHODS 라는 키워드를 쓰면 됩니다.

Event Handler method를 Event에 반응하도록 하기 위해선, 당신은 런타임시 그것에 반응할 Trigger를 결정해야합니다. 이것은 SET HANDLER 구문을 사용하여 정의할 수 있습니다. SET HANDLER 구문은 Event Trigger로서 Event Hnadler Methods를 등록할 수 있습니다.

Instance Events는 특정 인스턴스나 모든 인스턴스에 등록될 수 있습니다. 반면, Static Event들은 전체 클래스에 등록되집니다. Instance Event를 위한 SET HANDLER 구문 문법은 다음과 같습니다.

SET HANDLER event_handler_method FOR oref
SET HANDLER event_handler_method FOR ALL INSTANCES.

Static Event를 위한 SET HANDLER 구문 문법은 다음과 같습니다.

SET HANDLER event_handler_method.

여기서, event_handler_method는 Instance건 Static이건 Event를 위한 Event Handler로서 정의됩니다. Event Handler Method는 handler가 SET HANDLER 구문을 통해 등록되지 않았다면, 작동되지 않을 것입니다.

CLASS cl_events_demo DEFINITION.
 PUBLIC SECTION.
  EVENTS double_click
  EXPORTING
   VALUE(column) TYPE i
   VALUE(row) TYPE i .

  CLASS-EVENTS right_click .
  METHODS trigger_event.
  
  METHODS on_double_click FOR EVENT double_click OF cl_events_demo
  IMPORTING
   column
   row
   sender.

  METHODS on_right_click FOR EVENT right_click OF cl_events_demo.
 ENDCLASS.
 
CLASS cl_events_demo IMPLEMENTATION.
 METHOD trigger_event.
  RAISE EVENT double_click
   EXPORTING
    column = 4
    row = 5.
  
  RAISE EVENT right_click.
 ENDMETHOD.

 METHOD on_double_click.
  WRITE: / 'Double click event triggered at column', column,'and row', row.
 ENDMETHOD.
 
 METHOD on_right_click.
  WRITE: / 'Right click event triggered’.
 ENDMETHOD.
ENDCLASS.

 DATA oref TYPE REF TO cl_events_demo.

START-OF-SELECTION.
 CREATE OBJECT oref.
 SET HANDLER oref->on_double_click FOR oref. “Instance event
 SET HANDLER oref->on_right_click. “Handler for Static event
 CALL METHOD oref->trigger_event( ).

위 예시를 보면, 클래스에서 Event를 정의하고 등록하는 예시가 정해져 있습니다. 이 예시는 cl_event_demo라는 클래스를 두 가지 double_click과 on_double_click이라는 Events로 정의하였습니다. double_click은 Instance Event로 정의되었고, right_click은 Static Event로 정의하였습니다. double_click 이벤트는 column과 row라는 복수개의 필수 Exporting Parmeter를 가지도록 정의되었습니다. 우리는 또한 trigger_event라는 method를 trigger method로 작동을 하도록 정의하였습니다. 이것은 보통의 method를 정의하는 방법과 매우 유사합니다. Method on_double_click과 on_right_click은 double_click과 right_click을 위한 Event handler Method로서 각각 정의되었습니다.

클래스의 Implementation Part에서, trigger_event라는 메소드는 RIASE EVENT라는 구문을 써서, double_click과 right click이라는 Event를 작동하는데 사용하였습니다. double_click Event는 exporting parameter를 포함하고 있기 때문에, 이 trigger event드도 event_handler_method에게 특정 값을 Export 해주어야 합니다. Method on_double_click 메소드는 trigger method로부터 값을 전달받습니다. 프로그램 코드에서, events들은 SET_HANDLER 구문을 통해 등록되고, Event Handler Method안의 코드들은 trigger event 메소드가 호출될 때 실행됩니다.

정의 :
1.이벤트 정의
2.정의된 이벤트를 발생시키는 Trigger Method 정의
3.이벤트의 실제 역할을 하는 Event_handler_method 정의

구현 :
1. Trigger Method 구현
2. Event Handler 구현
3. 객체 생성
4. 객체에 Event Handler 등록
5. Trigger Method 실행

반응형