SAP ABAP/기본

서브루틴(Subroutine) vs 펑션 모듈(Function Module) – 차이점 비교

물꼬_ 2025. 1. 19. 21:06

📌 서브루틴(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): 여러 프로그램에서 사용 가능, 예외 처리 기능 제공

즉, 서브루틴은 작은 단위의 코드 재사용, 펑션 모듈은 여러 프로그램에서 공통적으로 사용할 기능을 만들 때 사용해! 😊