Modularization

  1. Subroutine 은 FORM으로 시작하여 END FORM으로 종료되는 구문
    • 스크립트의 모듈화, 재사용, 구조화를 주목적
    • ABAP 프로그램에서는 PERFORM 구문을 이용한 Subroutine으로 유사한 기능 제공
  2. Function Module - 파라미터 값을 주고 받음

Subroutine 정의

  • FORM으로 시작하여 ENDFORM 으로 종료되는 구문
  • Subroutine을 FORM문과 같은 것으로 간주하면 된다.
  • FORM 구문은 프로그램 내/외부에서 호출 가능

Subroutine 파라미터

  • 파라미터는 Subroutine을 호출하는 구문과 호출받는 구문 사이에 주고 받는 값
  • Actual Parameter = Subroutine을 호출할 때 사용되는 파라미터
  • Formal Parameter = Subroutine에서 사용되는 파라미터

파라미터 전달방법

  • Subroutine은 Using과 Changing 구문으로 파라미터를 주고 받음

    1. Call by Value

      • 넘겨주는 변수(Actual Parameter)와 받는 변수(Formal Parameter)가 물리적으로 다른 메모리 영역을 가지고 있다.

        FORM subr USING .. VALUE(pi) [TYPE <t>|LIKE <f>]
      • Subroutine을 호출할 때 Actual Parameter의 값은 Formal Parameter에 복사되지만 Formal Parameter의 값이 변하더라도 Actual Parameter에는 영향을 미치지 않는다.

    2. Call by Reference

      • 물리적으로 같은 메모리 영역을 공유하여 넘겨주며 값은 주소

      • CHANGING 키워드 다음에 파라미터를 사용하면 Subroutine에 전달된 파라미터 값이 변경된다.

        FORM subr CHANGING ... pi [TYPE <t>|LIKE <f>] ...
      • Subroutine의 Formal Parameter는 자신의 메모리를 가지지 않는다. Subroutine이 호출되는 동안 Actual parameter의 주솟값을 가지고 있을 뿐

      • Subroutine을 호출 한 프로그램의 메모리에서 작업하게 된다.

      • CHANGING 대신 USING 사용해도 에러 발생 안함

      • 단지 가독성 차원에서 사용, 병경한다는 걸 명시적으로 구분하기 위해 사용

      • Actual Parameter의 값이 Subroutine내에서 자동으로 변경되는 것을 피하려면 USING과 VALUE 구문을 함께 사용해야 한다.

    3. Call by Value and Result

      • 변수의 값을 넘겨주고 받는 구문에서 작업을 성공적으로 수행하였을 경우 변경된 값을 되돌려 준다. 물리적으로는 다른 영역

      • CHANGING 키워드 다음에 파라미터를 사용하고 VALUE 구문으로 완성

        FORM subr CHANGING..VALUE(pi) [TYPE <t>|LIKE <f>].
      • USING구문과 VALUE구문이 함께 사용되면 Subroutine이 정상적으로 종료될 경우 Actual Parameter 값이 변경된다.


파라미터 타입 정의

  • FORM 구문 내의 Formal Parameter는 TYPE과 LIKE 구문을 이용해 모든 ABAP 데이터 타입을 사용할 수 있다.
  • 타입을 명시적으로 지정하지 않으면 Generic Type으로 정의되고 Actual Parameter의 기술적 속성을 상속받게 된다.
  • Formal Parameter는 모든 ABAP Data Type이 허용되기에 구조체도 당연히 사용
    • 단 구조체를 전달할때 타입을 지정하지 않았으면 구조체 칼럼을 write하거나 인식하려 할 때 필드 심볼을 이용해야 함

파라미터와 인터널 테이블

  • USING CHANGING 구문
    • 인터널 테이블을 Subroutine의 파라미터로 사용할 때도 USING, CHANGING 키워드를 사용할 수 있다.
    • FORM문에 테이블 타입을 TYPE ANY TABLE을 주었다면 READ 구문을 동적으로 변경해야 한다. ( 이 부분 이해 안감, 2회독때 다시 보자)

TABLES 구문

  • USING과 CHANGING 구문 대신 사용 가능

Subroutine 호출

  • 호출하는 방법은 Internal, External 두가지 방법
* INTERNAL
PERFORM subr.
* EXTERNAL
PERFORM subr (prog) [IF FOUND].
  • 외부 External Subroutine 호출시에는 [IF FOUND] 구문을 사용하여 해당 Subroutine이 존재하는지 체크하는 것이 바람직, 체크하지 않았을 때 Subroutine이 존재하지 않으면 덤프에러 발생
  • 동적 호출 가능
  • LIST를 이용한 호출 가능
DO 2 TIMES.
    PERFORM SY-INDEX OF subr1 subr2.
ENDDO.

FORM subr1.
    WRITE / 'subr1 is called'.
ENDFORM

FORM subr2.
    WRITE / 'subr2 is called'.
ENDFORM

* 결과

*subr1 is called
*subr2 is called

'SAP > Easy ABAP' 카테고리의 다른 글

Ch 04 FUNCTION  (0) 2021.02.02
Ch 03 OPEN SQL & NATIVE SQL - 3  (0) 2021.01.18
Ch 03 OPEN SQL & NATIVE SQL - 2  (0) 2021.01.14
Ch 03 OPEN SQL & NATIVE SQL - 1  (0) 2021.01.12
Ch 02 Data Type - 2  (0) 2021.01.08

+ Recent posts