본문 바로가기

ABAP 프로그래밍 개념/Modulazation Technique

Pass by Value [vs] Pass by Reference

SAP에서 Processing Block으로 대표되는 Subroutine, Function Module, Method의 경우에는 전부 Parameter Interface(매개변수를 통해 데이터를 주고받는 방식)으로 구성되어있다. 

여기서 가장 중요한 개념이 Parameter를 넘겨줄 때, 데이터를 어떻게 전달(Pass)시킬 것이냐의 문제이다. 이것에는 두 가지 방식이 있다.

1. Pass by Value
2. Pass by Reference

런타임동안, Subroutine, Function Module, Method 에서 Parameter(매개변수)가 호출될 때라면, 파라미터를 Pass by Value, Pass by Reference 방식 중 한가지의 방식으로 호출하는 쪽( 호풀하는 프로그램 : Actual Parameter) 과 받는 쪽에 매칭되는 Parameter 를 넘겨줘야 합니다.

그림1. Actual Parameter ~ Formal Parameter


Pass by Value


Pass by Value는 사전에 언급된 VALUE 라는 addition을 통해 가능해진다. 성능측면에서, Pass by Value는 actual Parameter( 실제 파라미터 : 호출하는 쪽의 파라미터 )의 복사( copy )를 생성하고 소비(사용)을 위해 받는 Pcocessing Block 쪽으로 넘겨주는 것을 의미한다. 결과적으로, Processing Block(Subroutine, Function Module, Method) 안에서 매개변수에 대해 변화를 가져간다 하더라도 오직 그 복사한 값에만 영향을 미치는 것이므로 실제 actual Parameter에는 혼란을 주지 않는다.

Method를 예시로 본다면, Actual Parameter인 x는 해당 Method가 호출된다면 x의 복사본이 만들어 지고 이 x의 복사본이 Formal Parameter인 a로 할당될 것이다. 예상할수 있듯이, 이러한 종류의 작업은 대용량 데이터 객체를 처리할 때, 다소 비용(메모리, 시간 등)이 많이 들 수 있다.

단, Changing Parameter의 경우에는, Pass by Value로 선언되었다고 하더라도, 실제 값을 바꾸겠다는 이유로 선언한 것이 기 때문에 Formal Parameter에 가져온 변화가 Actual Parameter에 영향을 줄 수 있다.


Pass by Reference


다른 방식으로 Pass by Reference는 Reference Parameter는 호출될 때 사용되는 Actual Parameter에 대해서 Reference(참조 혹은 Pointer)를 포함한다. 그러므로, Referece Parameter에 대한 변화가 만들어진다면 이것은 실제 Actual Parameter에도 반영이 됩니다. 그림 1을 보면, Parameter b를 보도록 합니다. Method안에서 b에 대해 값에 변화를 줬다면, 호출되는 프로그램에서의 y에도 마찬가지로 변화가 반영이 됩니다.

다만, 이 변화를 가져오는 행동에는 잠재적인 부작용이 있습니다. 값을 바꾸는 행동을 가져가기 때문에 결과가 달라질 수 도 있기 때문이다. 그래서 Method와 같은 경우에는, Importing Parameter로 정의된 것에 대해서는 Method 안에서 reference parameter의 값을 바꾸는 것에 대해 ABAP은 Lock Down을 진행한다. 그렇지만, 이러한 부작용을 제외하고 생각하면, Pass by Reference는 퍼포먼스 측면에서 더 좋다.


다음에는 Subroutin에서 다양하게 사용되는 것에 대해서 배워보도록 하겠습니다.

 

반응형