📌 서브루틴(Subroutine) vs 펑션 모듈(Function Module) – 차이점 비교
ABAP에서 서브루틴과 펑션 모듈은 모두 특정 기능을 실행하는 코드 블록이지만, 중요한 차이점이 있다.
✅ 1. 정의
🔹 서브루틴 (Subroutine)
- FORM ~ ENDFORM을 사용해 하나의 프로그램(Report) 내에서 코드 블록을 재사용하는 방식
- 한 프로그램 안에서만 사용 가능 (글로벌X, 로컬O)
🔹 펑션 모듈 (Function Module, FM)
- SAP에서 제공하는 글로벌 함수(Global Function)
- FUNCTION ~ ENDFUNCTION을 사용해 만들며, 여러 프로그램에서 호출 가능
- SAP의 Function Builder(SE37)에서 관리됨
✅ 2. 주요 차이점 비교
비교 항목 | 서브루틴 (Subroutine) | 펑션 모듈 (Function Module) |
호출 범위 | 하나의 프로그램(Report) 내에서만 사용 가능 | 여러 프로그램에서 사용 가능 (글로벌) |
구현 방식 | FORM ~ ENDFORM | FUNCTION ~ ENDFUNCTION |
데이터 전달 | USING, CHANGING으로 전달 | IMPORT, EXPORT, TABLES로 전달 |
예외 처리 | 직접 처리해야 함 | EXCEPTIONS 기능 제공 |
사용 목적 | 단순 코드 재사용 | 시스템 전반에서 공통 기능 제공 |
관리 위치 | 개별 프로그램 안에서만 존재 | Function Builder(SE37)에서 관리 |
SAP 표준 제공 여부 | 개발자가 직접 만들어야 함 | SAP에서 기본 제공하는 FM도 있음 |
✅ 3. 예제 비교
🔹 서브루틴 예제 (한 프로그램 안에서 사용)
REPORT ZSUBROUTINE_DEMO.
DATA: lv_name TYPE string.
lv_name = '철수'.
PERFORM say_hello USING lv_name.
FORM say_hello USING p_name TYPE string.
WRITE: '안녕,', p_name, '야!'.
ENDFORM.
- PERFORM say_hello USING lv_name. → 서브루틴 호출
- FORM say_hello USING p_name TYPE string. → 서브루틴 정의
- 단점: 다른 프로그램에서는 이 기능을 쓸 수 없음
🔹 펑션 모듈 예제 (여러 프로그램에서 사용 가능)
📌 펑션 모듈 생성 (SE37에서 개발)
FUNCTION Z_SAY_HELLO.
"* 인터페이스 정의
IMPORTING
VALUE(P_NAME) TYPE STRING.
EXPORTING
VALUE(E_MESSAGE) TYPE STRING.
EXCEPTIONS
INPUT_ERROR.
"* 기능 구현
IF P_NAME IS INITIAL.
RAISE INPUT_ERROR.
ELSE.
CONCATENATE '안녕,' P_NAME '야!' INTO E_MESSAGE.
ENDIF.
ENDFUNCTION.
📌 펑션 모듈 호출 (어떤 프로그램에서든 사용 가능)
DATA: lv_name TYPE string VALUE '영희',
lv_message TYPE string.
CALL FUNCTION 'Z_SAY_HELLO'
EXPORTING
p_name = lv_name
IMPORTING
e_message = lv_message
EXCEPTIONS
input_error = 1.
WRITE lv_message. "출력: 안녕, 영희 야!
- CALL FUNCTION 'Z_SAY_HELLO' → 펑션 모듈 호출
- IMPORTING / EXPORTING으로 데이터 주고받음
- 장점: 여러 프로그램에서 호출 가능!
✅ 4. 언제 사용해야 할까?
상황 | 서브루틴 사용 | 펑션 모듈 사용 |
한 프로그램 내에서만 사용될 코드 | ⭕️ | ❌ |
여러 프로그램에서 공통적으로 사용할 기능 | ❌ | ⭕️ |
SAP 표준 기능을 활용하고 싶을 때 | ❌ | ⭕️ |
예외 처리 기능이 필요할 때 | ❌ | ⭕️ |
빠르게 간단한 코드 블록을 만들 때 | ⭕️ | ❌ |
🎯 결론 정리!
✔ 서브루틴(Subroutine): 한 프로그램에서만 재사용 가능, 간단한 기능을 묶을 때 사용
✔ 펑션 모듈(Function Module): 여러 프로그램에서 사용 가능, 예외 처리 기능 제공
즉, 서브루틴은 작은 단위의 코드 재사용, 펑션 모듈은 여러 프로그램에서 공통적으로 사용할 기능을 만들 때 사용해! 😊
'SAP ABAP > 기본' 카테고리의 다른 글
Function Module(함수 모듈) 생성 및 사용 방법 (0) | 2025.01.21 |
---|---|
서브루틴 (Subroutine)과 파라미터 전달 방식 (CALL BY REFERENCE / RESULT / VALUE / USING / CHANGING) (0) | 2025.01.21 |
오류 수정 - ABAP Debugger 사용법 (0) | 2025.01.15 |
메시지 클래스 - Dialog Messages (0) | 2025.01.15 |
ABAP Statements | Loop문 (Do & While), 시스템 오류 (0) | 2025.01.15 |