안녕하세요.
오늘은 Call by Value와 Call by Reference의 차이와 해당 개념이 어디에 사용되는가를 공부해보겠습니다.
[개념]
먼저, Call by Value와 Call by Reference는 함수, 메소드 호출 시 사용되는 개념입니다.
그럼 어디에 사용되는지 알았죠?? sap에서는 함수, 메소드 퍼폼문에서 사용되는 개념입니다.
우리가 정말 많이 사용하지만, 단순히 복사 붙여넣기만 했거나 그냥 타 프로그램에서 펑션 및 메소드를 호출만 해보았기 때문에 해당 개념에 대한 이해가 부족합니다.
1. Call by value와 Reference의 차이를 알아보자.
하단 링크를 들어가 개념을 먼저 보고옵시다.
https://sudo-minz.tistory.com/91
Call by value, Call by reference 차이 (자바에서의 Call by value, Call by reference)
함수 호출 방법은 크게 두가지가 있다. Call by value(값에 의한 호출) Call by reference(참조에 의한 호출) Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다. Call by reference(참조에 의
sudo-minz.tistory.com
2. SAP에서 사용되는 Call by value와 Reference.
2-1) 퍼폼문
저는 사번 '2024017'을 'person_number' 변수를 통해 퍼폼문에 값을 전달하고, 사번 '2024017'에 맞는 이름을 'my_name'이라는 변수를 통해 받아오고 싶습니다.
당연히, 퍼폼문 이전 my_name 변수는 아무 값도 없는 상태입니다.
그러고 퍼폼문을 타면, 아래와 같이 my_name 변수에 이름이 채워집니다.
이렇게 퍼폼문을 사용하는 경우를 종종 보셨을 겁니다.
저희가 방금 사용한 개념이 Call by Reference입니다.
퍼폼문이나, 펑션, 메소드에서 값을 받아올 때, 우리가 선언한 my_name이라는 변수의 값이 빈값→홍길동으로 채워지게 됩니다. 즉, 변하게 됩니다.
즉, 위 링크에서 설명이 되었 듯이 변수의 메모리를 직접 참조하기 때문에 값이 변경이 되는 것이에요.
그럼 Call by Value일 경우에는 어떻게 될까요??
우리가 퍼폼문이나 펑션, 메소드를 호출하여 사번을 던진다 한 들, 우리가 받아오는 my_name 변수의 값은 변함이 없습니다.
왜냐구요?? 아래 캡처화면을 보시는 것과 같이 Call by Value는 Value Modified가 'NO'! 즉, 되지 않습니다.
서로 약속된 개념입니다.
그럼.. 퍼폼문에서 Call by Value와 Reference를 어떻게 구분할까요??
왼쪽이 Call by Reference고 오른쪽 화면이 Call by Value입니다.
Value(p_name) 보시면 아시겠지만, call by value는 value라는 구문이 추가적으로 들어갑니다.
한번 퍼폼문 밖에서 변수 선언 후에 퍼폼문안으로 값을 던져보세요.
2-2) 펑션
펑션에도 개념이 똑같이 존재합니다. 바로 'Pass Value'라는 버튼입니다.
pass value에 체크가 되면 Call by value입니다.
RFC 펑션을 생성할 때 Pass Value에 체크하지 않으면, 아래와 같은 메시지가 나오며 오류가 발생하는 것을 볼 수 있습니다.
RFC는 타 시스템과 데이터를 주고 받기 위해 만드는 펑션입니다.
즉, 타 시스템과 통신하는 펑션이죠.
왜 RFC펑션에서는 Call by Value만 허용할까요?
RFC의 경우 시스템 간 필요한 데이터를 주고받기 위해 사용됩니다.
그럼, 우리가 필요한 데이터를 가져오려면 조회조건도 타 시스템에 던져줘야겠죠??
전 사원의 이름이 아닌, 사번 '2024017'에 대한 이름만 필요한 경우처럼요.
만약 통신하는 과정에서 조회조건이 바뀌면 어떻게 될까요?
우리는 조회조건을 A사번의 이름이 필요하여 A사번을 주고 A사번의 이름을 받을 준비를 하고 있는데,
통신 중 사번 조건 값이 'B'로 변경되어 그쪽에서 B사번에 대한 이름를 주면 될까요?
결국 Call by Reference와 Call by Value는 RFC 통신 시 가장 두드러지게 사용됩니다.
우리가 이지아밥을 읽어도 어려운 이유는 무엇일까요??
기술적으로 정말 잘 정리된 교과서 같은 책이지만, 우리 같은 초보들은 이걸 어디에 적용해야할지 모르니 와닿지 않아서입니다.
구문이 어디에 자주 사용되는지 주변에 자주 질문해보아요 ~
감사합니다.
'- SAP ABAP 구문' 카테고리의 다른 글
프로그램 생성 시, Include를 왜 사용하는가? (0) | 2024.01.16 |
---|---|
금액 마이너스 부호를 맨 앞으로 옮기기(CLOI_PUT_SIGN_IN_FRONT) (0) | 2023.03.06 |
헤더라인과 인터널 테이블 (0) | 2022.12.12 |
SY-TABIX와 SY-INDEX의 차이에 대해서 알아보기 (0) | 2022.11.10 |
DO ~ ENDDO 구문 (구구단 출력) (0) | 2022.11.09 |