반응형
“EXPORTING 참조 파라미터를 초기화하거나 덮어쓰기하라“는 ABAP에서 EXPORTING 파라미터를 참조(reference)로 전달받을 때, 해당 파라미터가 초기화되지 않았거나, 이전 상태를 그대로 유지한 채로 전달되는 상황을 피하기 위한 설계 지침입니다. 이 지침은 데이터 일관성과 예측 가능한 동작을 유지하고, 코드에서 예상치 못한 동작을 방지하기 위한 것입니다.
EXPORTING 참조 파라미터의 문제점
참조로 전달되는 EXPORTING 파라미터는 함수나 메서드가 호출되기 전의 상태를 유지할 수 있으며, 그 상태를 의도하지 않게 사용하는 경우 문제가 발생할 수 있습니다. 특히, 함수나 메서드 내부에서 해당 파라미터를 수정하지 않는다면, 파라미터의 상태가 예상치 못한 방식으로 전달될 수 있습니다.
- 예측 가능성 문제: 참조로 전달된 파라미터가 메서드나 함수 내부에서 명시적으로 초기화되지 않으면, 호출자는 파라미터의 상태를 예측하기 어려울 수 있습니다. 이로 인해 결과값이 불명확해질 수 있습니다.
- 데이터 일관성 문제: 메서드가 파라미터를 수정하지 않거나 불완전하게 수정한 경우, 이전 상태가 유지되거나 부분적으로만 업데이트될 수 있습니다. 이는 데이터의 일관성에 문제를 초래할 수 있습니다.
참조 파라미터를 초기화하거나 덮어쓰기
초기화
- 메서드나 함수 내부에서 EXPORTING 참조 파라미터를 사용할 때, 해당 파라미터를 명시적으로 초기화해야 합니다. 이를 통해 이전 상태가 유지되는 것을 방지하고, 파라미터가 항상 명확한 상태에서 사용되도록 보장할 수 있습니다.
* 참조 파라미터 초기화
METHOD get_user_info.
EXPORTING
ev_name TYPE string.
CLEAR ev_name.
ev_name = 'John Doe'.
ENDMETHOD.
덮어쓰기
- 메서드나 함수 내부에서 파라미터를 완전히 덮어쓰도록 설계합니다. 즉, 파라미터의 기존 상태에 의존하지 않고, 메서드가 파라미터에 할당할 값을 항상 결정해야 합니다. 이를 통해 기존 값이 의도치 않게 사용되는 것을 방지할 수 있습니다.
* 참조 파라미터 덮어쓰기
METHOD calculate_sum.
EXPORTING
ev_sum TYPE i.
ev_sum = iv_num1 + iv_num2.
ENDMETHOD.
적용 시점
- 참조 파라미터의 초기화 또는 덮어쓰기가 필요한 경우: 메서드나 함수가 EXPORTING 파라미터로 값을 반환할 때, 해당 파라미터가 항상 명확한 초기 상태를 가지도록 하거나, 완전히 덮어써야 할 경우 사용합니다.
- 이전 상태를 유지하면 안 되는 경우: 파라미터가 이전의 값을 유지할 경우 부정확한 결과를 초래할 수 있는 상황에서는 항상 초기화하거나 덮어쓰도록 해야 합니다.
“EXPORTING 참조 파라미터를 초기화하거나 덮어쓰기하라“는 EXPORTING 참조 파라미터가 이전 상태를 유지하지 않도록 보장하라는 의미입니다. 메서드나 함수 내부에서 해당 파라미터를 명시적으로 초기화하거나, 기존 값에 관계없이 새 값을 덮어써서 항상 예측 가능한 결과를 반환하도록 해야 합니다. 이를 통해 데이터 일관성을 유지하고, 코드의 안전성을 높일 수 있습니다.
“Value 파라미터를 초기화하지 마라“는 ABAP 코딩 스타일 지침으로, 값(Value) 파라미터를 초기화하는 대신, 전달된 인수를 그대로 사용하는 것이 좋다는 의미입니다. 이 지침은 함수나 메서드가 호출될 때, 호출자가 전달한 값을 그대로 사용하고, 불필요하게 초기화하는 동작을 피하라는 취지입니다.
Value 파라미터란?
- Value 파라미터는 IMPORTING 파라미터의 기본 전달 방식 중 하나로, 함수나 메서드가 호출될 때 값 자체가 복사되어 전달됩니다. 이 파라미터는 메서드 내부에서 변경해도 호출자의 원래 데이터에는 영향을 미치지 않습니다.
왜 Value 파라미터를 초기화하면 안 되는가?
1. 호출자의 의도 유지
- Value 파라미터는 호출자가 특정 값을 전달하는 의도를 반영한 것입니다. 해당 값은 호출자가 설정한 의미를 가지고 있으므로, 함수나 메서드 내부에서 불필요하게 초기화하면 호출자의 의도가 사라질 수 있습니다.
- Value 파라미터를 변경하지 않고 그대로 사용하는 것이 원칙입니다. 전달된 값이 사용되지 않고 초기화되면, 코드의 예측 가능성이 떨어지고, 호출자가 전달한 값이 무시되는 결과가 될 수 있습니다.
2. 불필요한 동작 방지
- 함수나 메서드 내부에서 Value 파라미터를 초기화하면, 불필요한 동작이 추가되며 코드가 더 복잡해질 수 있습니다. 이로 인해 코드의 가독성이 떨어질 뿐 아니라, 성능에도 영향을 미칠 수 있습니다.
- Value 파라미터는 이미 초기화된 상태로 전달되므로, 이를 다시 초기화하는 것은 불필요한 작업입니다.
3. 메모리 효율성
- Value 파라미터를 초기화하면 메모리 사용이 비효율적일 수 있습니다. 파라미터가 이미 호출 시점에 복사되었는데, 초기화 과정에서 다시 메모리를 할당하거나 값을 변경하는 것은 비효율적인 메모리 사용으로 이어질 수 있습니다.
* 잘못된 패턴
METHOD calculate.
IMPORTING
iv_number TYPE i.
CLEAR iv_number.
iv_number = iv_number + 10.
ENDMETHOD.
* 올바른 패턴
METHOD calculate.
IMPORTING
iv_number TYPE i.
DATA(lv_result) = iv_number + 10.
ENDMETHOD.
“Value 파라미터를 초기화하지 마라“는 함수나 메서드가 호출될 때 전달된 Value 파라미터를 초기화하지 않고, 그대로 사용하는 것이 바람직하다는 의미입니다. Value 파라미터는 이미 호출자가 의도한 값이므로, 함수 내부에서 불필요하게 초기화하지 않음으로써 호출자의 의도를 존중하고, 코드의 예측 가능성을 유지하며, 불필요한 메모리 사용과 동작을 방지할 수 있습니다.
반응형
'ABAP Clean Code' 카테고리의 다른 글
ABAP 클린 코드 - METHOD 메서드 (메서드 바디) [10-6] (1) | 2024.08.29 |
---|---|
ABAP 클린 코드 - METHOD 메서드 (파라미터 유형) [10-4] (1) | 2024.08.27 |
ABAP 클린 코드 - METHOD 메서드 (파라미터 개수) [10-3] (0) | 2024.08.26 |
ABAP 클린 코드 - METHOD 메서드 (객체 지향 메서드) [10-2] (0) | 2024.08.25 |
ABAP 클린 코드 - METHOD 메서드 (호출) [10-1] (0) | 2024.08.24 |