[Easy ABAP 2.0] SAP ERP 입문자의 독학 공부기록 📚 [04. Modularization (Subroutine & Function)]

jimi·2025년 5월 15일

이지 아밥 2.0

목록 보기
7/11
post-thumbnail

부제: ABAP 프로그램 구조화, 모듈화하기

✅ Subroutine

역할: 로컬 모듈화. 반복 코드·복잡 로직 분리.

 (FORM...ENDFORM)

Subroutine = FORM

네이밍 룰: 동사+목적어 형태 (ex. write_data)

파라미터: 서브루틴을 호출하는 구문과 호출받는 구문 사이에 주고받는 값.

  • Actual 파라미터: 서브루틴 호출할 때 사용되는 파라미터
  • Formal 파라미터: 서브루틴에서 사용되는 파라미터

1. 파라미터 전달 방법

  • Call by Value
  • Call by Reference
  • Call by Value and Result

파라미터 타입 정의

FORM 구문 내의 Formal 파라미터는 TYPE 과 LIKE 구문을 이용해 모든 ABAP 데이터 타입을 사용할 수 있다.

TYPE d를 파라미터로 FORM 구문에 전달했다면 Formal 파라미터는 다음 3가지 방법으로 타입 정의할 수 있음.

  1. Generic Type 사용
    FORM sub CHANGING p_val.
  2. Actual Parameter와 같은 타입 사용
    FORM sub CHANGING p_val TYPE d.
  3. Actual Parameter와 같은 타입 변수 사용
    FORM sub CHANGING p_val LIKE gv_val.

파라미터 구조체

구조체를 파라미터로 사용할 때는 TYPE, LIKE, STRUCTURE 구문을 이용해 구조체 타입을 정의할 수 있음.

  • 구조체를 파라미터로 전달할 때 타입을 명시적으로 지정 X? -> ERROR

2. 파라미터와 인터널 테이블

(1) USING, CHANGING 구문

인터널 테이블을 서브루틴의 파라미터로 사용할 때도 USING, CHANGING 키워드를 사용할 수 있다.

(2) TABLES 구문

TABLES 구문은 Rel 3.0 이전 버전에서 사용되는 것. USING, CHANGING 구문 대신에 사용할 수 있음. (호환성 문제로 현재에도 많이 사용된다. )

Tables 구문으로 Formal 파라미터를 정의하면 Call by value가 지원되지 않음.

3. 서브루틴 호출 방법

Internal, External 두가지 방법 존재.

1. 내부 서브루틴 호출

PERFORM 구문으로 이름만 지정하면 됨.

2. 외부 서브루틴 호출

[IF FOUND] 구문 사용.
해당 서브루틴이 존재하는지 체크.

3. 동적 서브루틴 호출

  1. 서브루틴 이름 동적 지정

외부 프로그램의 서브루틴을 호출할 경우, 이름을 동적으로 지정 가능.

  1. 리스트를 이용한 서브루틴 호출
    시스템의 idx 순서에 따라 서브루틴 리스트 호출.
PERFORM idx OF subr1 subr2 ... subrn.

순환 반복 구문

  1. DO ~ ENDDO
  • 순환 횟수를 지정할 수 있는 구문
  1. WHILE ~ ENDWHILE
  • WHILE 구문의 다음의 표현식이 참이면 반복순환을 지속.
  1. LOOP ~ ENDLOOP
  • 인터널 테이블의 라인을 차례대로 Work Area 또는 Header Line으로 이동하는 순환 구문.

4. 서브루틴 종료

END FORM. 구문을 만나면 정상적으로 종료됨.
EXIT, CHECK 구문을 활용하여 수행 중에 종료 가능.

5. Temporary 서브루틴

: 메인 메모리에서 동작하는 동적 서브루틴 정의 가능.

GENERATE Subroutine POOL <itab> NAME <prog> .

-> 현재 실행 중인 프로그램의 Main 메모리에 서브루틴 POOL을 생성하게 됨.
서브루틴 풀의 소스코드를 <itab> 인터널 테이블에 삽입. 8자리 Type C의 <prog> 서브루틴 프로그램을 생성하게 됨.

6. PERFORM ON COMMIT

  • ON COMMIT : COMMIT WORK 구문을 만날 때 서브루틴 구문 호출됨.
  • ROLLBACK: ROLLBACK WORK 구문을 만날 때 서브루틴 구문 호출됨.

7. MACRO

MACRO…ENDMACRO

1. Local MACRO

프로그램에서 같은 구문을 여러번 사용할 때.
다른 프로그램에서는 호출할 수 없다는 단점 존재.

2. Global MACRO

모든 프로그램에서 사용할 수 있음.


✅ Function (함수)

: 서브루틴과 유사하게 기능별로 모듈화하고 재사용이 가능하도록 지원함.

서브루틴이 Local Modularization이라면
Function 모듈은 Global Modularization.

Function과 서브루틴의 차이점

  • Function 모듈은 Function Group이라고 불리는 POOL에 소속되어야 함.
  • Function 모듈은 예외 처리 기능 제공. 에러 발생하면 예외 사항을 호출한 프로그램에 전달 가능.
  • Function 모듈은 호출 프로그램에 상관없이 Stand-alone 모드에서 테스트 가능.

1. Function Module

역할: 전역 모듈화.
중앙 라이브러리(R/3 레포지토리)에 저장되는 특별한 Global 서브루틴. 어디서나 호출 가능
스크립트 수 줄일 수 있음.

1. 펑션 모듈 리스트 검색

생성하기 이전에 구현하고자하는 펑션이 존재하는지 확인해야함.

  • T-CODE:SE37

2. 펑션 모듈 세부 내용

구성 (SE37):

  • Import/Export/Changing/Tables 파라미터
  • 예외(Exceptions) 정의

(1) Attributes

[Attributes] 탭에서는 그룹, 생성인, 생성일, 패키지 등 일반적인 관리 정보와 프로세싱 타입 정보 조회

(2) Import 파라미터

변숫값을 전달받는 목적으로 사용됨.

(3) Export 파라미터

ABAP 프로그램으로 값을 전달하는 목적으로 사용되는 파라미터.

(4) Changing 파라미터

ABAP 프로그램과 파라미터를 동시에 주고받을 수 있음.

(5) Tables 파라미터

하나의 값이 아닌 복수의 값, 인터널 테이블의 내용을 주고받을 수 있음.

(6) Exceptions

예외 사항 처리

2. Function Group

: 함수 모듈 컨테이너. 같은 그룹 내 모듈은 메모리 세션 공유

직접 실행할 수 없음.
펑션 호출했을때, 시스템은 호출한 프로그램의 Internal 세션 안으로 펑션 그룹 전체를 로드한다.

  • 주의해야할 점은 펑션이 실행될 때 이 펑션이 소속된 그룹 내의 모든 펑션이 영향을 받는다는 것. <- 펑션 하나에 에러가 발생하면, 동일 그룹 내의 모든 펑션이 실행되지 않음!

그래서 펑션 그룹 내에 중요한 펑션을 많이 생성하는 것은 검토가 필요함.

펑션 그룹 이름은 26자까지 가능.
메인프로그램의 이름은 'SAPL'이 펑션 그룹 앞에 붙어 구성됨.

Function Group 생성

  • T-CODE:SE37 또는 T-CODE:SE80 에서 생성 가능함.

3. RFC

SAP 담당자는 RFC 함수를 이용해 데이터를 EXPORT 하고 WEBBMETHODS가 데이터를 받아서 레거시로 전달해준다.

RFC의 정확한 의미는 시스템 간의 커뮤니케이션 프로세스를 담당하는 SAP 인터페이스 프로토콜.


핵심 3가지 ⭐️

  • 간단 반복 로직이나 로컬 유틸리티엔 서브루틴,
    전사적 재사용, 예외 처리, 독립 테스트가 필요하면 Function Module 사용하기.
  • 매크로는 신중히 사용하자

  • 한 Function Group에 너무 많은 모듈을 몰아넣지 말고, 도메인별·프로세스별로 쪼개기

profile
멋진 SAP 전문가가 되기 위하여

0개의 댓글