매개변수 (컴퓨터 프로그래밍)

컴퓨터 프로그래밍에서 매개변수()란 변수의 특별한 한 종류로서, 함수 등과 같은 서브루틴의 인풋으로 제공되는 여러 데이터 중 하나를 가리키기 위해 사용된다. 여기서 서브루틴의 인풋으로 제공되는 여러 데이터들을 전달인자(argument)라고 부른다. 보통 매개변수의 목록은 서브루틴의 정의 부분에 포함되며, 매번 서브루틴이 호출될 때마다 해당 호출에서 사용된 전달인자들을 각각에 해당하는 매개변수에 대입시켜 준다.

보통 수학에서 사용되는 것과 마찬가지로, 전달인자는 (log(37)에서 37과 마찬가지로) 실제로 함수 또는 루틴에 전달되는 값을 의미하며, 반대로 매개변수는 함수의 내부에서 해당 함수(앞의 예에서 log)로 전달된 값을 가리키기 위한 변수를 의미한다. 매개변수와 전달인자 단락 참조.

대부분의 경우 매개변수는 call by value의 형태로 동작하게 되며, 이 경우 서브루틴 내부에서 매개변수는 전달 인자를 복사한 독립적인 지역변수의 형태로 동작하게 된다. 반면 call by reference의 경우에는 서브루틴 내부에서의 동작이 이를 호출한 부분에서의 전달인자에까지 영향을 주게 된다.

매개변수가 어떻게 정의되는지와 전달인자가 서브루틴의 매개변수에 어떻게 전달되는지에 대한 구문은 각각의 프로그래밍 언어에 따라 정의되지만, 이것이 각각의 컴퓨터 시스템 내부에서 실제로 어떻게 구현되는지에 대해서는 해당 시스템의 호출 규약에 달려있다.

사용 예 

C 언어로 구현된 아래의 프로그램에서, "sales_tax"는 함수의 이름이며 이 함수가 가지고 있는 "price"라는 이름의 변수가 바로 매개변수이다. 추가로 이 "price"라는 매개변수의 타입은 double (부동소수점)이며, 이 함수의 리턴 타입 또한 double이다.

double sales_tax(double price)
{
    return 0.05 * price;
}

이렇게 함수를 정의한 후, 다음과 같은 방법으로 함수를 호출 할 수 있다.

sales_tax(10.00);

이 예제에서 sales_tax 함수를 호출하면서 숫자 10.00을 인자로 전달해 주었으며, 따라서 10.00 이 price 라는 변수에 대입되고 sales_tax 함수는 이를 이용하여 결과값을 계산하게 된다. sales_tax 함수 내부에서 {}로 둘러싸여진 부분에서 "0.05 * price"는 price 값에 0.05를 곱하라는 의미이며, "return"은 해당 함수가 "return" 뒤에 나오는 "0.05 * price"의 계산 값을 리턴하라는 의미이므로, 따라서 최종적인 결과는 0.50이 된다.

매개변수와 전달인자 

종종 매개변수(parameter)와 전달인자(argument)는 적당히 섞어서 쓰이기도 하는데, 이 경우 문맥에 따라 의미를 달리해서 해석되기도 한다. 하지만 엄밀히 말해서 매개변수는 함수의 정의부분에 나열되어 있는 변수들을 의미하며, 전달인자는 함수를 호출할 때 전달되는 실제 값을 의미한다. 이같은 의미를 명확히 하기 위해 매개변수는 변수(variable)로, 전달인자는 값(value)으로 보는 것이 일반적이다.

매개변수는 함수의 정의 부분에서 볼 수 있으며, 전달인자는 함수를 호출하는 부분에서 볼 수 있다. f(x) = x*x와 같은 함수 정의 부분에서 변수 'x'가 매개변수가 되며, f(2)와 같은 함수 호출 부분에서 값 '2' 가 함수의 전달인자가 된다.

각각의 매개변수는 함수의 정의 부분에 포함되어 있는 고유한 특성이다. 예를 들어, (대다수의 언어에서는) 입력으로 들어온 2개의 정수를 더해서 합을 계산해 주는 함수의 경우 정수 형태의 매개변수 2개가 필요하다. 일반적으로 함수는 몇개의 매개변수를 가지든 상관없으며, 매개변수가 하나도 없을 수도 있다. 만약 함수가 매개변수를 가질 경우, 각각의 매개변수에 대한 정의를 나열해 놓은 것을 매개변수 목록(parameter list) 이라고 한다.

반면 전달인자는 함수가 호출될 때 제공되는 값들을 말하며, 함수 정의의 한 부분으로 바뀌지 않는 매개변수와는 달리 호출 할 때마다 값이 바뀔 수 있다. 함수를 호출하는 부분에서 전달인자를 나열해 놓을 것을 전달인자 목록(argument list) 이라고 한다.

같이 보기 
 연산자 오버로딩

참고 자료 

함수 (프로그래밍)
변수 (컴퓨터 과학)