Main Content

중첩 함수에서 인수의 개수 검사하기

여기에서는 중첩 함수에 varargin, varargout, nargin, nargout을 사용하는 경우 특별히 고려해야 할 사항에 대해 설명합니다.

vararginvarargout을 사용하면 가변 개수의 입력 인수나 출력 인수를 받는 함수를 생성할 수 있습니다. vararginvarargout은 함수 이름과 비슷하지만 함수가 아니라 변수를 참조합니다. 중첩 함수는 중첩 함수를 감싸는 함수와 작업 공간을 공유하므로 이는 매우 중요합니다.

중첩 함수의 선언에 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

반면, narginnargout은 함수입니다. 중첩 함수 등 임의의 함수 내에서 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

참고 항목

| | |