SAP ABAP – Pass-by-Value vs Pass-by-Reference 이해하기
SAP ABAP에서 메서드 호출 시 파라미터는 값(Value) 또는 참조(Reference) 방식으로 전달됩니다. 이 두 방식은 메모리 동작, 성능, 그리고 메서드 내부에서의 값 변경 여부에 큰 차이가 있으므로, ABAP OOP를 사용하는 개발자라면 반드시 정확히 이해해야 합니다.
1) 파라미터 전달의 기본 개념
ABAP에서 메서드가 호출되면 호출부의 Actual Parameter(실제 값)가 메서드 시그니처에 정의된 Formal Parameter(형식 파라미터)에 매핑됩니다. 이때 형식 파라미터가 어떻게 선언되었느냐에 따라 아래 두 방식으로 전달됩니다:
- Pass-by-Value — 값 자체를 복사하여 전달
- Pass-by-Reference — 값의 ‘참조(주소)’를 전달
2) Pass-by-Value (값 전달)
핵심 개념: 메서드 호출 시 실제 파라미터의 복사본(Copy)이 생성됨. 메서드 내부에서 값이 변경되더라도 원본 데이터는 영향을 받지 않음.
✔ 특징
- 메서드 내부의 수정이 호출부(actual parameter)에 영향을 주지 않음
- 부작용(side effect)이 없어 안정적
- 하지만 대용량 구조 전달 시 비용(메모리·성능)이 증가
VALUE키워드로 명시 가능
✔ 예시 상황
값을 사용해 계산만 하고 원본 데이터를 절대 건드리면 안 되는 경우 (예: 금액 계산, 문자열 처리 등)
3) Pass-by-Reference (참조 전달)
핵심 개념: 메서드는 실제 변수의 주소(reference)를 전달받음. 따라서 메서드 내부에서의 모든 변경이 호출부에 그대로 반영됨.
✔ 특징
- 데이터 복사가 없으므로 성능 우수
- 메서드 내부 값 변경 시 원본 데이터 변경됨
- 의도치 않은 값 변경 발생 가능 → Side Effect 위험
✔ Importing 파라미터로 Side Effect 방지
ABAP은 IMPORTING 파라미터를 reference 형태로 전달하더라도 메서드 내부에서 값을 변경하지 못하도록 제한함.
- IMPORTING + pass-by-reference = 원본 값 변경 불가능
- 컴파일러가 내부 수정 시 오류 발생시켜 안정성 확보
- 따라서 성능 이점(참조 전달 유지) + 값 보호(수정 금지) 둘 다 만족
4) Pass-by-Value vs Pass-by-Reference 비교 요약
<t
| 구분 | Pass-by-Value | Pass-by-Reference |
|---|---|---|
| 동작 방식 | 값 복사 전달 | 주소(참조) 전달 |
| 메서드 내부 수정이 호출부에 미치는 영향 | 없음 |