[ABAP] Function Module을 Method로 리팩토링하기

몰라·2025년 4월 5일

ABAP

목록 보기
6/13

내가보고있는 코드들은 거의 method에서 쓰이는 function인것같은데
지금 내용이랑 연관있을것같음.


CALL FUNCTION → METHOD로 리팩토링하는 흐름 (실무 예시 중심)

이전 포스팅에서는 CALL FUNCTIONMETHOD CALL의 차이점을 정리했다.
그렇다면 실무에서 기존 Function Module을 메서드로 리팩토링해야 할 때,
어떤 식으로 접근하고 변환하는 게 좋을까?

이 포스팅에서는 실제 업무 예시를 통해
Function Module을 클래스 기반의 메서드로 바꾸는 과정을 정리해본다.


✅ 리팩토링 전: 기존 Function Module 구조

예: 세금 계산 기능이 있는 Function Module

FUNCTION z_calculate_tax.
  "*" Interface
  IMPORTING
    VALUE(iv_amount) TYPE i
  EXPORTING
    VALUE(ev_tax)    TYPE i.
  ev_tax = iv_amount * 10 / 100.
ENDFUNCTION.

호출 예:

DATA: lv_tax TYPE i.
CALL FUNCTION 'Z_CALCULATE_TAX'
  EXPORTING
    iv_amount = 1000
  IMPORTING
    ev_tax = lv_tax.

🛠️ 리팩토링 후: 클래스 기반 메서드 구조

클래스 정의 (SE24 또는 로컬 클래스)

CLASS zcl_tax_util DEFINITION.
  PUBLIC SECTION.
    METHODS calculate_tax
      IMPORTING iv_amount TYPE i
      RETURNING VALUE(rv_tax) TYPE i.
ENDCLASS.

CLASS zcl_tax_util IMPLEMENTATION.
  METHOD calculate_tax.
    rv_tax = iv_amount * 10 / 100.
  ENDMETHOD.
ENDCLASS.

호출 예:

DATA(lo_util) = NEW zcl_tax_util( ).
DATA(lv_tax) = lo_util->calculate_tax( iv_amount = 1000 ).

🔍 리팩토링 흐름 요약

단계내용
1단계기존 Function Module의 기능과 파라미터 분석
2단계동일한 구조로 메서드 시그니처 정의 (IMPORTING, RETURNING)
3단계내부 로직을 메서드 안으로 복사하고 테스트
4단계기존 호출 구문을 Method 기반으로 변경

✅ 왜 리팩토링할까?

이유설명
객체지향 표준에 맞추기신규 개발은 클래스 기반 개발을 기본으로 함
테스트와 재사용성 향상클래스 기반은 Mocking / Test Class 작성 쉬움
유지보수 편의성기능 단위로 캡슐화되어 추적과 수정이 쉬움

💡 팁: 완전 대체가 어려운 경우

  • SAP 표준 Function Module은 리팩토링 대상이 아님 (그대로 사용해야 함)
  • RFC Function (시스템 간 통신용)은 그대로 유지해야 함
  • 하지만 내부 계산, 유틸리티, 도메인 처리 로직은 메서드로 대체 가능

✅ 마무리

Function Module을 무조건 없애야 하는 건 아니지만,
새로 만드는 기능이나 유틸성 처리는 가급적
클래스 기반의 Method로 개발하는 것이 더 유연하고 유지보수도 쉬움.

공부할것 : SAP 표준 FM을 Wrapping하는 패턴

profile
일주일 동안 헤맨 흔적을 정리하러 왔습니다

0개의 댓글