프로그래밍언어론 - 매개변수 전달 방식
값 전달
실 매개변수의 값을 형식 매개변수에 저장하고 형식 매개변수를 부프로그램의 지역 변수로 사용하는 방식이다
실 매개변수와 형식 매개변수는 별개의 변수이므로 형식 매개변수의 어떠한 변화도 실 매개변수에는 아무런 영향을 미치지 않는다
C와 Java, C++는 값 전달이 기본 방식, Ada의 in 매개변수가 값 전달 방식이다.
- in 매개 변수를 이용해서 값 전달을 보여주는 Ada의 예
Ada in 매개변수의 특이점은 값을 배정 할 수 없다는 점이다.
with TEXT_IO;
use TEXT_IO;
procedure parameter is
package INT_IO is new TEXT_IO.INTEGER_IO (integer); use INT_IO;
a, b: integer;
procedure sub(x, y: in integer) is
begin
put(x); put(y); -- x와 y의 값을 출력합니다.
end sub;
begin
a := 10; b := 20; -- 변수 a에 10을, 변수 b에 20을 할당합니다.
sub(a, b); -- sub 프로시저를 a와 b를 인자로 호출합니다.
end parameter;
즉 Ada에서 “in” 매개변수 모드는 매개변수가 프로시저 내에서 읽기 전용이며 값을 할당할 수 없음을 나타냅니다.
프로시저가 매개변수의 원래 값을 수정하지 않고 프로시저에 데이터를 전달하는 데 사용됩니다.
“in” 매개변수를 사용하는 목적은 데이터 불변성을 보장하고 매개변수 값이 프로시저 내에서 변경되지 않는다는 보장을 제공합니다
참조 전달
- 실 매개변수의 주소를 형식 매개변수로 보내는 방식
- 형식 매개변수는 실 매개변수의 별명(alias)이 되어 형식 매개변수의 어떠한 변화도 실 매개변수에 그대로 반영
- FORTRAN, C++의 참조자 형식 매개변수를 사용하는 경우
값-결과 전달
- 부 프로그램을 호출 할 때 실 매개변수의 값을 형식 매개변수에 저장하고, 동작하다가 부프로그램을 종료할 때 형식 매개변수의 값을 실 매개변수로 반환
- ALGOL 68, Ada의 in out 매개변수
즉 위의 예제에 좀 더 설명을 덧붙이자면, 아래와 같습니다 - 형식 매개변수는 서브프로그램 내에서 읽기 전용이며 새 값을 지정할 수 없습니다.
- 형식 매개변수는 호출자의 원래 변수에 대한 상수 또는 읽기 전용 참조 역할을 합니다.
- 하위 프로그램은 원래 변수의 값에 액세스할 수 있지만 수정할 수는 없습니다.
- “in” 매개변수 모드는 하위 프로그램이 실수로 원래 값을 수정할 수 없도록 합니다.
이름 전달
이름 전달은 형식 매개변수의 이름이 사용될 때마다 실제 매개변수의 해당 이름으로 대체되는 방법입니다.
이 개념은 ALGOL 60 프로그래밍 언어에서 사용되었습니다.
이름 전달에서 하위 프로그램이 호출되면 형식 매개변수의 이름이 실제 매개변수의 이름으로 대체됩니다.
이는 하위 프로그램 내의 공식 매개변수에 대한 모든 참조가 실제 매개변수의 해당 이름으로 효과적으로 대체됨을 의미합니다.
이름 전달 방식을 사용하는 부프로그램 동작은 형식 ㅓ매개변수의 이름을 실매ㅐ변수의 이름으로 대치하여 실행한 결과와 같음
프로그램을 작성하기가 어렵고, 구현이 어려워 최근 대부분의 언어에서 사용 되지 않는다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글
프로그래밍 언어론 - 포괄 부프로그램 (0) | 2023.05.30 |
---|---|
프로그래밍언어론 - 중복 부프로그램 (0) | 2023.05.30 |
프로그래밍언어론 - 부프로그램 (0) | 2023.05.30 |
프로그래밍언어론 - 반복문 (2) | 2023.05.30 |
프로그래밍 언어론 - 조건문 (0) | 2023.05.30 |