์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- call function
- ๋จ๋ฐฉํฅํ์
- select
- subscreen
- ๊น์ด์ฐ์ ํ์
- modify
- ABAP
- abap dictionary
- ์ด๋ถํ์
- screen
- screen program
- ๋ฐฑ์ค
- Function Module
- ๋๋น์ฐ์ ํ์
- t์ฝ๋
- Import
- ๋ชจ๋ํ
- PRD
- ์คํธ๋ญ์ฒ
- Export
- SAP
- ์๋ฐฉํฅํ์
- Internal Table
- ์ค๋ฒ2
- qas
- dev
- structure
- ์ค๋ฒ3
- ์๊ณ ๋ฆฌ์ฆ
- tasknumber
- Today
- Total
CS Student’s SAP&Tech Journey๐ซ
[SAP] ๋ก์ปฌ ๋ชจ๋ Subroutine(์๋ธ๋ฃจํด)์ด๋? / FORM ์ฌ์ฉํ์ฌ ํธ์ถํ๊ธฐ / Call by Value, Call by Reference ๋ณธ๋ฌธ
[SAP] ๋ก์ปฌ ๋ชจ๋ Subroutine(์๋ธ๋ฃจํด)์ด๋? / FORM ์ฌ์ฉํ์ฌ ํธ์ถํ๊ธฐ / Call by Value, Call by Reference
์ธํฌ๋งํฑ 2025. 1. 31. 18:08ABAP์์๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ๋ชจ๋ํ๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Local Module vs Global Module ์ฐจ์ด, FORM์ ํ์ฉํ ์๋ธ๋ฃจํด ์ ์ ๋ฐ ํธ์ถ, ๊ทธ๋ฆฌ๊ณ Call by Value vs Call by Reference์ ์ฐจ์ด๋ฅผ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
๐ฏ Local Module vs Global Module ์ฐจ์ด
ABAP์์ ๋ชจ๋์ ํฌ๊ฒ ๋ก์ปฌ(Local) ๋ชจ๋๊ณผ ๊ธ๋ก๋ฒ(Global) ๋ชจ๋๋ก ๋๋ฉ๋๋ค.
1. Local Module (๋ก์ปฌ ๋ชจ๋)
- ํ ํ๋ก๊ทธ๋จ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- FORM ... ENDFORM์ ์ฌ์ฉํ์ฌ ์ ์
- ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- Subroutine, Local Class
์์ :
FORM display_message.
WRITE: 'Hello, this is a local module!'.
ENDFORM.
START-OF-SELECTION.
PERFORM display_message.
2. Global Module (๊ธ๋ก๋ฒ ๋ชจ๋)
- ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- Function Module์ด๋ Class Method๋ก ์ ์
- SE37์์ Function Module ์์ฑ ๊ฐ๋ฅ
- Function Group, Global Class
์์ : Function Module์ ํธ์ถํ๋ ๋ฐฉ๋ฒ
DATA: lv_result TYPE i.
CALL FUNCTION 'Z_MY_FUNCTION'
EXPORTING
iv_value1 = 10
iv_value2 = 20
IMPORTING
ev_result = lv_result.
WRITE: / '๊ฒฐ๊ณผ:', lv_result.
โ FORM์ ํ์ฉํ ์๋ธ๋ฃจํด ์ ์ ๋ฐ ํธ์ถ
์๋ธ๋ฃจํด(Subroutine)์ FORM ... ENDFORM์ ์ฌ์ฉํ์ฌ ์ ์๋ฉ๋๋ค. ํน์ ์์ ์ ์ํํ๊ณ ๋์ผํ ์ฝ๋ ๋ธ๋ก์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค.
1. ์๋ธ๋ฃจํด ๊ธฐ๋ณธ ๊ตฌ์กฐ
FORM subroutine_example.
WRITE: '์๋ธ ๋ฃจํด ์
๋๋ค'.
ENDFORM.
START-OF-SELECTION.
PERFORM subroutine_example.
2. ํ๋ผ๋ฏธํฐ ์ ๋ฌ
์๋ธ๋ฃจํด์์ ๊ฐ์ ์ ๋ฌํ๋ ค๋ฉด USING(call by value)๊ณผ CHANGING(call by reference)์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
FORM add_numbers USING lv_num1 TYPE i
lv_num2 TYPE i
CHANGING lv_result TYPE i.
lv_result = lv_num1 + lv_num2.
ENDFORM.
START-OF-SELECTION.
DATA: lv_output TYPE i.
PERFORM add_numbers USING 5 10 CHANGING lv_output.
WRITE: / '๊ฒฐ๊ณผ:', lv_output.
โ ์๋ธ๋ฃจํด ๊ฐ ์ ๋ฌ ๋ฐฉ์ Call by Value ์ Call by Reference์ ์ฐจ์ด
์๋ธ๋ฃจํด์์ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์์๋ Call by Value์ Call by Reference๊ฐ ์์ต๋๋ค.
1. Call by Value (๊ฐ ์ ๋ฌ)
- ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ๋ฌ
- ์๋ธ๋ฃจํด์์ ๋ณ๊ฒฝํด๋ ์๋ณธ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์
- FORM ์๋ธ๋ฃจํด์ด๋ฆ USING value(์ธ๋ถ์์ ์ ๋ฌ๋ ๋ณ์๊ฐ ๋ฐ๋ ๋ณ์) TYPE ํ์ .
- PERFORM: ์๋ธ๋ฃจํด์ ํธ์ถํ์ฌ ์ ๋ ฅ๊ฐ์ ์ ๋ฌํจ.
- FORM: ์ ๋ฌ๋ฐ์ ๊ฐ์ ์ด์ฉํ์ฌ ์ถ๋ ฅ์ ์ํํจ.
PARAMETERS p_name1 TYPE scustom-name.
PARAMETERS p_name2 TYPE scustom-name.
PERFORM sub_name USING p_name1.
PERFORM sub_name USING p_name2.
FORM sub_name USING value(f_name) TYPE scustom-name.
WRITE: /'HELLO', f_name.
ENDFORM.
- sub_name ์ด๋ผ๋ ์๋ธ๋ฃจํด์ ์ ์ํ๋ค.
- USING value(f_name) TYPE scustom-name:
- USING์ ์ธ๋ถ์์ ์ ๋ฌ๋ ๊ฐ(Actual Parameter)์ ๋ฐ์์ ์ฌ์ฉํ ๋ ์ฐ์.
- value(f_name)์ ์ฌ์ฉํ๋ฉด ๊ฐ(Call by Value)์ผ๋ก ์ ๋ฌ๋๊ณ , ๋ด๋ถ์์ ๋ณ๊ฒฝํด๋ ์๋ ๋ณ์(p_name1, p_name2)์ ์ํฅ ์์.
2. Call by Reference (์ฐธ์กฐ ์ ๋ฌ)
- ๋ณ์์ ์ฐธ์กฐ(์ฃผ์)๋ฅผ ์ ๋ฌํ์ฌ ์๋ณธ ๊ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- CHANGING ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ๋ก ์ ๋ฌ
PARAMETERS p_id1 TYPE scustom-id.
PARAMETERS p_id2 TYPE scustom-id.
PERFORM sub_id CHANGING p_id1.
PERFORM sub_id CHANGING p_id2.
FORM sub_id CHANGING f_id TYPE scustom-id.
WRITE: / 'id๋', f_id.
ENDFORM.
๐ ์๋ธ๋ฃจํด ์์
1) ๊ณ์ฐ๊ธฐ ๊ตฌํํ๊ธฐ
PARAMETERS: lv_num1 TYPE I, lv_num2 TYPE I, lv_oper TYPE string.
DATA lv_result TYPE I.
PERFORM sub_cal USING lv_num1 lv_num2 lv_oper
CHANGING lv_result. "์ฒ์์๋ ๋น์ด ์์ง๋ง, FORM ๋ด๋ถ์์ ๊ฐ์ด ํ ๋น
WRITE: '๊ณ์ฐ ๊ฐ์', lv_result.
FORM sub_cal USING
value(f_num1) TYPE I
value(f_num2) TYPE I
value(f_oper) TYPE STRING
CHANGING f_result. "f_result๋ lv_result๋ฅผ ์ง์ ์ฐธ์กฐํ๋ ๋ณ์
"์ฆ, f_result์ ๊ฐ์ด ํ ๋น๋๋ฉด, ์ด๋ ๊ณง๋ฐ๋ก lv_result์๋ ๋ฐ์๋จ.
CASE f_oper.
WHEN '+'.
f_result = f_num1 + f_num2.
WHEN '-'.
f_result = f_num1 - f_num2.
WHEN '*'.
f_result = f_num1 * f_num2.
WHEN '/'.
IF f_num2 <> 0.
f_result = f_num1 / f_num2.
ELSE.
WRITE: / 'num2 ์๋ฌ'.
ENDIF.
ENDCASE.
ENDFORM.
2) ํญ๊ณต์ฌ ์ฝ๋ 2๊ฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ํด๋น ํญ๊ณต์ฌ์ ์ด๋ฆ๊ณผ url ์ถ๋ ฅํ๊ธฐ
PARAMETERS gs_id1 TYPE scarr-carrid.
PARAMETERS gs_id2 TYPE scarr-carrid.
DATA gs_info1 TYPE SCARR.
DATA gs_info2 TYPE SCARR.
PERFORM get_id USING gs_id1 Changing gs_info1.
PERFORM get_id USING gs_id2 Changing gs_info2.
WRITE: / gs_info1-carrname+0(10), gs_info1-url+0(32).
WRITE: / gs_info2-carrname+0(10), gs_info2-url+0(32).
FORM get_id USING value(f_id) TYPE scarr-carrid
Changing f_info TYPE SCARR.
CLEAR f_info.
SELECT SINGLE *
FROM SCARR
INTO f_info
WHERE carrid = f_id.
ENDFORM.