본문 바로가기

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

METHOD

METHOD 선언


인스턴스 메서드를 선언하려면 다음 구문을 사용한다.

 

METHODS meth IMPORTING [value i1..]
			 EXPORTING [value e1..]
             CHAINGING [value c1..]
             RETURNING VALUE (r)
             EXCEPTIONS exc1....

Static 메서드를 선언하려면 아래와 같이 선언한다.

CLASS-MEHTODS meth....

 

메서드를 선언시 IMPORTING, EXPORTING, CHANGING, RETURNING을 이용해 파라미터 인터페이스를 정의할 수 있다.

인터페이스 파라미터의 속성을 정의하며, 파라미터의 참조 주소(Reference)와 값(value)을 선택하여 사용할 수 있다.

 

값을 매개 변수로 넘겨주려면 VALUE 구문을 선언하여야 하며 RETURN VALUE는 항상 값으로 반환된다. 


Method 구현


클래스에서 선언된 IMPLEMENTATION 파트에서 선언하고 기능을 구현해야한다.

(IMPLEMENTATION 또는 Implementation라는 것은 메서드의 기능을 구현하는 것을 의미)

 

METHOD meth.

...

ENDMETHOD.

 

메서드를 구현할 때 클래스의 메서드 선언 부분에 정의한 것 이외에 인터페이스 파라미터를 정의할 필요는 없다. 인터페이스 파라미터는 지역 변수와 같은 역할을 하기 때문에 메서드 내에 DATA 구문을 이용하여 지역변수를 정의하면 된다.

 

Funcion Module와 같이 RAISE exception과 MESSAGE RAISING 구문을 이용하여 에러를 처리할 수 있다.

Static 메서드를 사용할 때는 클래스의 Static 속성에서만 적용됨에 주의하여야한다. 인스턴스 메서드는 Static과 Instance 속성에 모두 작동 가능.


METHOD 호출


메서드를 호출하려면 다음과 같은 구문을 사용.

CALL METHOD meth EXPORTING i1 = f1 i2 = f2 ...
				IMPORTING e1 = g1 e2 = g2 ...
                 CHANGING  c1 = f1 c2 = f2 ...
                 RECEIVING r = h
                 EXCEPTIONS e1 = rc1 e2 = rc2...

메서드 내에서 다른 메서드를 호출하려면 CALL METHOD meth...와 같이 사용하면 된다.

클래스의 외부에서 메서드를 호출하려면 CALL METHOD ref->meth. 구문을 이용한다.

(여기서 ref는 클래스의 인스턴스를 가리키는 값을 가진 객체 참조 변수.)

 

▪메서드를 호출할 때, EXPORTING 또는 CHANGING 구문과 같은 필수 엔트리는 반드시 선언하여야 한다.

▪단, IMPORTING 또는 RECEIVING 구문은 필수 구문이 아니다.

▪에러 처리를 위한 EXCEPTIONS 구문도 반드시 사용해야하는 것은 아니다.

 

▪IMPORTING 파라미터 하나로 구성된 메서드를 호출하려면 아래 구문을 이용한다.

CALL METHOD METHOD ( f ).

 

▪IMPORTING 파라미터 여러 개로 구성된 경우는 다음과 같이 기술한다.

CALL METHOD METHOD( i1 = f1 i2 = f2 ..)

 

파라미터 f의 값들은 각각 변수에 할당되어 사용된다.

IMPORTING 파라미터 표현식
없음 meth()
한 개 meth( f ) or meth ( p=f )
여러 개(n개) meth (p1 = f1 .... pn = fn )

동적인 METHOD 호출


▪동적으로 메서드를 호출하려면 dynamic 기호인 ( )를 사용한다.

 

CALL METHOD ref->(f)

 

▪Static 메서드는 다음과 같이 사용할 수 있다CALL METHOD class=>(f)CALL METHOD (c)=>methCALL METHOD (c)=>(f)

 

▪PERFORM 구문, FUCTION MODULE과는 다르게 PARAMETER-TABLE 구문을 추가하여 파라미터도 동적으로 선언할 수 있다.

CALL METHOD .... PARAMETER-TABLE ptab                       

EXCEPTION-TAGBLE etab.

 

예제.

CLASS c1 DEFINITION.
	PUBLIC SECTION.
    	DATA : gt_itab TYPE TABLE OF sflight,
        	   gs_str  TYPE sflight.
        METHODS : get_data,
        		  write_data.
ENDCLASS.

CLASS c1 IMPLEMENTATION.
	METHOD : get_data.
    	SELECT * INTO TABLE gt_itab
        FROM sflight
        UP TO 5 ROWS.
    ENDMETHOD.
    
    METHOD : write_data.
    	LOOP AT gt_itab INTO gs_str.
        	WRITE :/ gs_str-carrid, gs_str-connid.
        ENDLOOP.
    ENDMETHOD.
ENDCLASS.

DATA go_oref TYPE REF TO c1.
DATA gv_mth TYPE string.

FIELD-SYMBOLS <fs> TYPE ANY.

START-OF-SELECTION.
	CREATE OBJECT go_oref.
    
    gv_mth = 'GET_DATA'.
    CALL METHOD go_oref->(gv_mth).
    
    gv_mth = 'WRITE_DATA'.
    CALL METHOD go_oref->(gv_mth).

결과

AA 0017
AA 0017
LH 0056
LH 0056

EVENT HANDLER METHOD


앞선 글에서 설명하였듯이, 이벤트 핸들러 메서드는 CALL METHOD로 호출될 수 없는 특별한 타입의 메서드이다. 

CALL METHOD 대신에 이벤트를 이용해서 호출한다.

메서드를 이벤트 핸들러 메서드로 선언하려면 METHODS 또는 CLASS-METHODS 부분에 다음 구문을 추가로 기술해야한다.

 

METHODS 메소드명 FOR EVENT 이벤트명(evt) OF 클래스명

 

파라미터로 구성된 메서드는 이벤트 evt의 exporting 파라미터가 된다. 파라미터의 속성은 evt(EVENTS) 구문으로 선언된다.

 


Constructor


Constructor은 CALL METHOD로 호출할 수 없는  특별한 메서드.

 

대신, 클래스 또는 신규 객체의 초깃값을 지정할 때 Runtime 환경에서 시스템에 의해 자동으로 호출된다.

 

두 가지 유형의 생성자가 존재

1. Instance Constructor - CREATE OBJECT 구문을 통해 인스턴스가 생성될 때마다 호출됨

2. Static Constructor - 클래스를 처음호출할 때 한번만 사용.

 

METHODS CONSTRUCTOR

               IMPORTING [ VALUE i1 i2 ...] TYPE type [OPTIONAL]...

               EXCEPTIONS exc1 exc2 ...

 

이 구문에서 CONSTRUCTOR는 OUTPUT 파라미터가 존재하지 않고 단지 클래스의 상태만을 정의하는 것임을 알 수 있다. 클래스의 Instance Constructor는 이미 선언된 메서드 CONSTRUCTOR이다.

 

다른 메서드와 같이 PUBLIC 부분에 선언하고 IMPLEMENTATION 파트에서 메서드에 대해서 기술할 수 있다.

 

Static Constructor는 클래스가 처음으로 접근되기 전에 프로그램에서 한번 호출된다.

클래스의 Static Constructor는 이미 CLASS_CONSTRUCTOR로 내부적으로 선언되어있다.

다른 메스드와 같이 PUBLIC 부분에 CLASS-METHODS CLASS_CONSTRUCTOR라 선언하고, IMPLEMENTATION 파트에서 기능을 기술할 수 있다.

 

CLASS-METHODS CLASS_CONSTRUCTOR.

 

Static Constructor는 파라미터가 없다. 클래스가 처음으로 접근하기 전에 시스템이 Static Constructor를 호출하기 때문이다. 이러한 이유로 Static Constructor는 자신의 클래스 항목에 접근할 수 없다.

 

예제 - Instace Constructor를 명시적으로 선언하는 방법을 실습해보자.

 

CLASS c1 DEFINITION.
	PUBLIC SECTION.
    DATA : gt_itab TYPE TABLE OF sflight,
    	   gs_str TYPE sflight.
    DATA : gv_carrid TYPE s_carr_id,
           gv_connid TYPE s_conn_id.
           
    METHODS : constructor IMPORTING i_carrid TYPE s_carr_id.
    								i_connid TYPE s_conn_id.
                                    
    METHODS : get_data.
    
ENDCLASS.

CLASS c1 IMPLEMENTAION.
	METHOD : constructor.
    	gv_carrid = i_carrid.
        gv_connid = i_connid.
    ENDMETHOD.
    
	METHOD : get_data.
    SELECT * INTO TABLE gt_itab
    FROM sflight
    WHERE carrid = gv_carrid
    AND connid = gv_connid.
    ENDMETHOD.
ENDCLASS.

DATA go_oref TYPE REF TO c1.

START-OF-SELECTION.
	CREATE OBJECT go_oref
    	EXPORTING
        	i_carrid = 'AA'
            i_connid = '0017'.
            
    CALL METHOD go_oref->get_data.
    
LOOP AT go_oref->gt_itab INTO go_oref->gs_str.

	WRITE :/ go_oref->gs_str-carrid, go_oref->gs_str-connid, go_oref->gs_str-fldate.
    
ENDLOOP.

결과

AA 0017 2012-12-15

AA 0017 2013-01-12

AA 0017 2013-02-09

AA 0017 2014-03-09
반응형

'ABAP 프로그래밍 개념 > Object-Oriented ABAP' 카테고리의 다른 글

Procedural Programming vs Object-Oriented Programming  (1) 2023.01.01
Object Oriented 언어로서의 ABAP  (0) 2023.01.01
OBJECT(객체)란?  (1) 2020.08.12
CLASS [2] 구성요소  (0) 2020.08.05
CLASS [1]  (0) 2020.08.04