Main Content

함수의 유형

로컬 함수(Local Function)와 중첩 함수(Nested Function) - 파일 내에 존재

프로그램 파일은 여러 함수를 포함할 수 있습니다. 로컬 함수와 중첩 함수는 프로그램을 보다 작은 작업으로 나누어 코드를 읽고 유지하기 쉽게 만드는 데 유용합니다.

로컬 함수는 동일한 파일 내에서 사용할 수 있는 서브루틴입니다. 로컬 함수는 프로그래밍 작업을 나눌 수 있는 가장 일반적인 방법입니다. 함수 정의만 포함하는 함수 파일에서, 로컬 함수는 파일의 메인 함수 뒤에 어떤 순서로든 나타날 수 있습니다. 스크립트 파일에서, 로컬 함수는 조건부 컨텍스트(예: if 문과 for 루프) 내를 제외한 어느 위치에나 추가할 수 있습니다. 자세한 내용은 스크립트에 함수 추가하기 항목을 참조하십시오.

R2024a 이전: 스크립트의 로컬 함수는 파일 맨 끝, 즉 스크립트 코드의 마지막 라인 뒤에 정의되어야 합니다.

예를 들어, 메인 함수 myfunction, 두 개의 로컬 함수 squareMedoubleMe를 포함하는 myfunction.m이라는 함수 파일을 생성해 보겠습니다.

function b = myfunction(a)
   b = squareMe(a)+doubleMe(a);
end
function y = squareMe(x)
   y = x.^2;
end
function y = doubleMe(x)
   y = x.*2;
end

로컬 함수는 myfunction에서만 사용할 수 있지만 메인 함수는 명령줄 또는 다른 프로그램 파일에서 호출할 수 있습니다.

myfunction(pi)
ans =
   16.1528

중첩 함수는 다른 함수 내에 완전히 포함됩니다. 중첩 함수와 로컬 함수 간의 주요 차이점은 중첩 함수는 부모 함수에 정의된 변수를 인수로 명시적으로 전달하지 않고도 사용할 수 있다는 점입니다.

중첩 함수는 컴포넌트 간에 데이터를 전달하는 애플리케이션과 같이 서브루틴이 데이터를 공유하는 경우 유용합니다. 예를 들어, 슬라이더 또는 편집 가능한 텍스트 상자를 사용하여 0에서 1 사이의 값을 설정할 수 있는 함수를 생성해 보겠습니다. 콜백에 중첩 함수를 사용하는 경우 슬라이더 및 텍스트 상자는 값과 서로의 핸들을 명시적으로 전달하지 않고도 공유할 수 있습니다.

function myslider
value = 0;
f = figure;
s = uicontrol(f,'Style','slider','Callback',@slider);
e = uicontrol(f,'Style','edit','Callback',@edittext,...
                'Position',[100,20,100,20]);

   function slider(obj,~)
      value = obj.Value;
      e.String = num2str(value);
   end
   function edittext(obj,~)
      value = str2double(obj.String);
      s.Value = value;
   end

end

프라이빗 함수 - 하위 폴더 내에 존재

로컬 함수나 중첩 함수와 마찬가지로, 프라이빗 함수는 특정 위치의 함수에만 액세스할 수 있습니다. 그러나, 프라이빗 함수는 이 함수를 호출할 수 있는 함수와 동일한 파일에 있지 않습니다. 그 대신, private이라는 하위 폴더에 있습니다. 프라이빗 함수는 private 폴더 바로 위 폴더 함수에서만 사용할 수 있습니다. 코드를 여러 파일로 구분하거나 여러 관련 함수 간에만 코드를 공유하려면 프라이빗 함수를 사용하십시오.

익명 함수 - 파일 사용 안 함

함수가 단일 명령문으로 구성된 경우에 한해 익명 함수를 사용하면 프로그램 파일을 생성하지 않고 함수를 정의할 수 있습니다. 익명 함수의 일반적인 응용 방법은 수학 표현식을 정의한 후, 함수 핸들을 입력값으로 받는 함수인 MATLAB® 함수 함수(Function Functions)를 사용하여 특정 범위의 값에 대해 해당 표현식을 실행하는 것입니다.

예를 들어, 아래 명령문은 익명 함수에 대한 s라는 함수 핸들을 생성합니다.

s = @(x) sin(1./x);

이 함수는 단일 입력값 x를 가집니다. @ 연산자는 함수 핸들을 생성합니다.

다음과 같이 이 함수 핸들을 사용하여 특정 값에 대한 함수를 실행할 수 있습니다.

y = s(pi)
y = 
0.3130

또는, 이 함수 핸들을 fplot과 같이 특정 범위의 값에 대해 실행하는 함수에 전달할 수 있습니다.

range = [0.01,0.1];
fplot(s,range)

Figure contains an axes object. The axes object contains an object of type functionline.

관련 항목

외부 웹사이트