function과 method의 차이점을 생각하다가 여기까지 왔다..
ABAP을 배우다 보면 Function Module을 CALL FUNCTION으로 호출하고,
클래스 메서드를 ->로 호출하는 걸 보게 된다.
근데 둘 다 "기능을 실행"하는데 왜 방식이 다르고, 언제 뭘 써야 할까?
이번 포스팅에선 CALL FUNCTION과 METHOD CALL의 개념과 차이를 명확히 비교하고,
어떤 상황에서 어떤 걸 써야 하는지 팁까지 정리해본다.
| 항목 | CALL FUNCTION | Method Call (->method( )) |
|---|---|---|
| 구조 | 절차지향(Procedural) | 객체지향(Object-Oriented) |
| 재사용 방식 | Function Group에 포함된 전역 함수 | 클래스의 인스턴스 또는 정적 메서드 |
| 상태 보존 | 전역적 (전역 변수 사용 가능) | 인스턴스 단위 (내부 상태 유지 가능) |
| 인터페이스 | IMPORTING, EXPORTING, CHANGING, TABLES | IMPORTING, EXPORTING, CHANGING, RETURNING |
| 예외 처리 | EXCEPTIONS 구문 사용 | TRY...CATCH 블록 사용 가능 |
CALL FUNCTION 'Z_CALCULATE_TAX'
EXPORTING
iv_amount = 1000
IMPORTING
ev_tax = lv_tax
EXCEPTIONS
OTHERS = 1.
DATA(lo_util) = NEW zcl_fi_util( ).
DATA(lv_tax) = lo_util->calculate_tax( iv_amount = 1000 ).
| 구분 | Function (CALL FUNCTION) | Method (->method( )) |
|---|---|---|
| 호출 방식 | 절차형 호출 | 객체지향 호출 |
| 위치 | Function Group 내 | Class 내 |
| 결과값 처리 방식 | EXPORTING, CHANGING 등 사용 | RETURNING 으로 함수처럼 받을 수 있음 |
| 호출 문법 | CALL FUNCTION ... | lo_object->method( ) |
| 예외 처리 방식 | EXCEPTIONS | TRY...CATCH 가능 |
| 상황 | 추천 방식 | 이유 |
|---|---|---|
| 레거시 코드, 표준 FM 재활용 | CALL FUNCTION | 이미 존재하는 기능 재활용 가능 |
| 객체 단위로 상태를 갖고 동작해야 함 | Method Call | 객체 중심 구조로 더 유연하게 구성 가능 |
| 단순한 계산/조회 | Method Call (RETURNING) | 호출이 간결하고 가독성 높음 |
| RFC / 시스템 간 호출 필요 | CALL FUNCTION | RFC 전용 Function은 따로 생성됨 |
RETURNING은 Method에서만 사용 가능둘 다 기능 실행 도구지만,
시대 흐름은 객체지향(Method Call) 중심으로 이동 중
단, SAP 표준에는 여전히 많은 Function Module이 존재하기 때문에
둘 다 제대로 이해하고 있어야 실무에 강해진다!
다음 포스팅에서는 실제 업무 예시로
CALL FUNCTION→Method로 리팩토링하는 흐름을 소개할 예정입니다.