중첩 함수에서 인수의 개수 검사하기
여기에서는 중첩 함수에 varargin
, varargout
, nargin
, nargout
을 사용하는 경우 특별히 고려해야 할 사항에 대해 설명합니다.
varargin
및 varargout
을 사용하면 가변 개수의 입력 인수나 출력 인수를 받는 함수를 생성할 수 있습니다. varargin
및 varargout
은 함수 이름과 비슷하지만 함수가 아니라 변수를 참조합니다. 중첩 함수는 중첩 함수를 감싸는 함수와 작업 공간을 공유하므로 이는 매우 중요합니다.
중첩 함수의 선언에 varargin
또는 varargout
을 사용하지 않는 경우 중첩 함수 내의 varargin
또는 varargout
은 바깥쪽 함수의 인수를 참조합니다.
예를 들어, showArgs.m
이라는 파일에 varargin
을 사용하고 두 개의 중첩 함수를 가지는 함수를 생성하겠습니다. 두 중첩 함수 중 하나는 varargin
을 사용하고 다른 하나는 이를 사용하지 않습니다.
function showArgs(varargin) nested1(3,4) nested2(5,6,7) function nested1(a,b) disp('nested1: Contents of varargin{1}') disp(varargin{1}) end function nested2(varargin) disp('nested2: Contents of varargin{1}') disp(varargin{1}) end end
함수를 호출하고 두 개의 중첩 함수에서 varargin{1}
의 내용을 비교합니다.
showArgs(0,1,2)
nested1: Contents of varargin{1} 0 nested2: Contents of varargin{1} 5
반면, nargin
및 nargout
은 함수입니다. 중첩 함수 등 임의의 함수 내에서 nargin
또는 nargout
을 호출하면 해당 함수에 대한 인수의 개수가 반환됩니다. 중첩 함수에 바깥쪽 함수의 nargin
또는 nargout
에 대한 값이 필요할 경우에는 중첩 함수에 해당 값을 전달해야 합니다.
예를 들어, showNumArgs.m
이라는 파일에 주(부모) 함수에서 중첩 함수로 입력 인수의 개수를 전달하는 함수를 생성하겠습니다.
function showNumArgs(varargin) disp(['Number of inputs to showNumArgs: ',int2str(nargin)]); nestedFx(nargin,2,3,4) function nestedFx(n,varargin) disp(['Number of inputs to nestedFx: ',int2str(nargin)]); disp(['Number of inputs to its parent: ',int2str(n)]); end end
showNumArgs
를 호출하고 부모 함수와 중첩 함수의 nargin
에 대한 출력값을 비교합니다.
showNumArgs(0,1)
Number of inputs to showNumArgs: 2 Number of inputs to nestedFx: 4 Number of inputs to its parent: 2