서티 공부중인데 보던중 답이 없고 문제만 있네요~
덤프보는것도 많이 어렵네요~
02-1. call-by-value, call-by-reference, call-by-value and result의 개념으로 문제가 나왔습니다. Internal table과 화면과 인터페이스 할 때 효과적인(performance가 높은) 것은?
댓글 8
-
e-abap
2008.01.24 17:27
-
와우~
2008.01.24 19:33
감사합니다~초보라 무슨문제지 저도 잘 몰라사요~ㅋ
-
빠코
2008.01.24 20:36
e-abap님 call-by-value, call-by-reference, call-by-value and result 가 정확히 무엇을 하는 구문인가요? -
e-abap
2008.01.24 20:37
Subroutine은 FORM으로 시작하여 END FORM으로 종료되는 구문을 의미한다. 위 구문과 같이 PERFORM 구문으로 Subroutine을 호출하게 되면, FORM 구문을 수행하게 된다. FORM 구문은 프로그램 내부/외부에서 호출이 가능하다.
다음 구문은 Subroutine에 사용되는 다양한 옵션들을 보여 준다.
<BOX>
FORM subr [USING p1 TYPE type
p2 LIKE field
...
VALUE(p3) TYPE type
VALUE(p4) LIKE field
... ]
[CHANGING { {VALUE(p1)}|{p1 [{TYPE type}|{LIKE field}]}
{VALUE(p2)}|{p2 [{TYPE type}|{LIKE field}]}
</BOX>
Subroutine은 Using과 Changing 구문으로 이루어진 Parameter Interface를 통해 데이터를 주고 받게 된다. 파라미터 인터페이스의 기술은 크게 3가지로 요약된다.
Call by Value – 넘겨주는 변수(Actual Prameter)와 받는 변수(Formal Prameter)가 물리적으로 다른 영역을 가지고 있다. 즉 변수의 값만 넘겨준다. Subroutine 내에서 넘겨 받은 변수로 작업만 할 경우에 사용한다.
Call by Reference –물리적으로 같은 영역을 공유하여 넘겨주며 값은 주소이다. Subroutine 내에서 구문을 수행한 후 변경된 값을 되돌려 줄 경우에 사용한다.
Call by Value and Result – 변수의 값을 넘겨주고 받는 구문에서 작업을 성공적으로 수행하였을 경우 변경된 값을 되돌려준다. 물리적으로는 다른 영역을 사용한다. Call by Reference를 사용하게 되면 Subroutine이 정상적으로 종료되지 않고 ENDFORM 구문이 수행되지 않아도 Actual Parameter의 값이 변경된다. 반면에 Call By value and Result 구문은 ENDFORM. 구문이 수행될 때 Actual Parameter에 Formal Parameter의 값이 복사된다.
Call by value (f1) – 이 파라미터는 USING 키워드 다음에 파라미터를 사용하고, value(f1) 구문으로 완성한다.
Call by reference (f2) – CHANGING 키워드 다음에 파라미터를 사용된다.
Call by value and result (f3) – CHANGING 키워드
에다음에 파라미터를 사용하고, value(f3) 구문으로 완성한다.
USING 구문과 VALUE 구문이 함께 사용되면 Subroutine 내에서 Actual Parameter값을 변경할 수 없으나(Call by value), CHANGING 구문과 VALUE 구문이 함께 사용되면 Subroutine이 정상적으로 종료될 경우 Actual Parameter값이 변경된다(Call by value and result). VALUE 구문을 사용하지 않으면 USING구문과 CHANGING 구문은 CALL BY REREFERCN를 이용하게 된다. 이 부분은 뒤에서 예제와 함께 자세하게 언급한다.
-
초보bsp/abap
2008.01.24 20:59
서티 문제중 위와 똑같이 문제가 나왔다면 e-abap님이 말씀 하신것처럼 call-by-reference 가 제일 빠름. (1표) -
김지성
2008.01.25 00:35
@.@
-
와우~
2008.01.25 19:20
어렵네요~다른문제들 쉬운게 업네요~답변 감사합니다~
-
IAN~
2008.03.12 00:06
Call by value and result 가 가장 느리게됩니다 time consuming..
정확한 문제를 알아야 할텐데요.
첫째 퍼포먼스는 CALL-BY-REFERENCE가 제일 빠릅니다.
왜냐하면, 호출한 것과 호출당한 것이 동일한 메모리 영역의 변수에서 작업을 하기 때문이다.
이외 두개는 각각 메모리 영역을 점유하여 작업하기 때문에 복사 및 전달 과정이 추가적으로 필요합니다.
그런데, 이것이 인터페이스와 관련된 RFC 라면 이야기가 또 달라집니다.
RFC에는 CALL-BY-REFRERNCE는 사용할 수 없습니다.