내가보고있는 코드들은 거의 method에서 쓰이는 function인것같은데
지금 내용이랑 연관있을것같음.
이전 포스팅에서는 CALL FUNCTION과 METHOD CALL의 차이점을 정리했다.
그렇다면 실무에서 기존 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 작성 쉬움 |
| 유지보수 편의성 | 기능 단위로 캡슐화되어 추적과 수정이 쉬움 |
Function Module을 무조건 없애야 하는 건 아니지만,
새로 만드는 기능이나 유틸성 처리는 가급적
클래스 기반의 Method로 개발하는 것이 더 유연하고 유지보수도 쉬움.
공부할것 : SAP 표준 FM을 Wrapping하는 패턴