Subroutine ❓
: FORM으로 시작하여 END FORM으로 종료되는 구문을 의미하며, 스크립트의 모듈화, 재사용, 구조화를 주목적으로 한다.
PERFORM sb_ex.
FORM sb_ex .
WRITE 'Test'.
ENDFORM.
이렇게 서브루틴을 생성할 수 있다.
Parameter(파라미터)는 Subroutine을 호출하는 구문과 호출받는 구문 사이에 주고받는 값을 의미한다.
Subroutine 내에서 파라미터는 DATA 구문으로 정의하는 일반적인 Local 변수와 같다.
PERFORM의 USING, CHANGING 구문을 사용하여 파라미터를 선언하며 Subroutine과 그 순서를 같게 지정해야 한다.
PERFORM subr
USING
p1
CHANGING
p2
p3
FORM subr
USING
value(p1) "Call by Value
CHANGING
value(p2) "Call by Value and Result
p3 "Call by Reference
ENDFORM.
Subroutine은 USING과 CHANGING 구분으로 파라미터를 주고받게 되는데,
3가지 유형으로 분류된다.
Call by Value는 USING 키워드 다음에 파라미터를 사용하고, value 구문으로 완성한다.
value 구문에서 Formal Parameter는 자신의 메모리를 가진다. 서브루틴을 호출할 때 Actual Parameter의 값은 Formal Parameter에 복사된다. 하지만 Formal Parameter의 값이 변경되더라도 Actual Parameter에는 영향을 미치지 않는다.
CHANGING 키워드 다음에 파라미터를 사용하고, value 구문으로 완성한다.
서브루틴이 정상적으로 종료될 경우 Actual Parameter 값이 변경된다.
CHANGING 키워드 다음에 파라미터를 사용하면, Subroutine에 전달된 파라미터 값이 변경된다.
Subroutine의 Formal Parameter는 자신의 메모리를 가지지 않는다.
Subroutine이 호출되는 동안 Actual Parameter의 주솟값을 가지고 있을 뿐이다.
즉 Subroutine을 호출한 프로그램의 메모리에서 작업하게 된다.