Main Content

함수 핸들 생성하기

명명된 함수와 익명 함수에 대한 함수 핸들을 생성할 수 있습니다. 하나의 배열에 여러 함수 핸들을 저장하고, 여타의 변수와 마찬가지로 함수 핸들을 불러오고 저장할 수 있습니다.

함수 핸들이란?

함수 핸들은 함수에 대한 연결을 저장하는 MATLAB® 데이터형입니다. 함수를 간접적으로 호출하여 호출하는 위치에 상관없이 함수를 불러올 수 있습니다. 일반적으로 함수 핸들은 다음과 같이 사용할 수 있습니다.

  • 함수를 다른 함수(일명 함수 함수(Function Functions))로 전달합니다. 예를 들어, integral, fzero 등의 적분 함수와 최적화 함수에 함수를 전달합니다.

  • 콜백 함수(예: UI 이벤트에 응답하거나 데이터 수집 하드웨어와 상호 작용하는 콜백)를 지정합니다.

  • 프로그램 파일에 저장되는 대신 인라인에 정의된 함수(익명 함수)에 대한 핸들을 생성합니다.

  • 메인 함수 외부에서 로컬 함수를 호출합니다.

isa(h,'function_handle')을 사용하여 변수 h가 함수 핸들인지 확인할 수 있습니다.

함수 핸들 생성하기

함수에 대한 핸들을 생성하려면 @ 기호를 함수 이름 앞에 추가해야 합니다. 예를 들어, 함수에서 myfunction을 호출하도록 할 경우 다음과 같이 f라는 핸들을 생성합니다.

f = @myfunction;

함수를 직접 호출하는 것과 동일한 방식으로 핸들을 사용하여 함수를 호출합니다. 예를 들어, 다음과 같이 정의된 computeSquare라는 함수가 있다고 가정합니다.

function y = computeSquare(x)
y = x.^2;
end

핸들을 생성하고 4의 제곱을 계산하는 함수를 호출합니다.

f = @computeSquare;
a = 4;
b = f(a)
b =

    16

함수에서 입력값이 필요하지 않으면 다음과 같이 빈 괄호를 사용하여 함수를 호출할 수 있습니다.

h = @ones;
a = h()
a =

    1

괄호를 사용하지 않으면 대입식이 다른 함수 핸들을 생성합니다.

a = h
a = 

    @ones

함수 핸들은 다른 함수에 전달할 수 있는 변수입니다. 예를 들어, 범위 [0,1]에서 x2의 적분을 계산합니다.

q = integral(f,0,1);

함수 핸들은 절대 경로를 저장하므로 유효한 핸들이 있는 경우 어느 위치에서나 함수를 불러올 수 있습니다. 핸들을 생성할 때 함수에 대한 경로를 지정하지 않아도 됩니다. 함수 이름만 지정합니다.

함수에 대한 핸들을 생성할 때 다음 사항을 유념하십시오.

  • 이름 길이 — 함수 이름의 각 부분(패키지 이름과 클래스 이름 포함)은 namelengthmax에서 지정한 숫자보다 작아야 합니다. 그렇지 않으면 MATLAB에서 이름의 뒷부분을 자릅니다.

  • 범위 — 함수는 핸들을 생성한 당시의 범위 내에 있어야 합니다. 따라서 함수는 MATLAB 경로에 있거나 현재 폴더 내에 있어야 합니다. 또는 로컬 함수나 중첩 함수에 대한 핸들의 경우 함수가 현재 파일 내에 있어야 합니다.

  • 우선 순위 — 동일한 이름의 함수가 여러 개 있는 경우 MATLAB은 함수를 호출하는 규칙과 동일한 우선 순위 규칙을 사용하여 함수 핸들을 정의합니다. 자세한 내용은 함수 우선 순위(Function Precedence Order) 항목을 참조하십시오.

  • 오버로드 — 하나 이상의 인수를 사용하여 함수 핸들을 호출하면 MATLAB은 상위 인수를 확인합니다. 상위 인수가 객체인 경우 MATLAB은 객체의 클래스에 함수 핸들의 연결된 함수와 동일한 이름을 오버로드하는 메서드가 있는지 확인합니다. 그런 메서드가 있는 경우 연결된 함수 대신 객체의 메서드가 호출됩니다.

익명 함수

익명 함수에 대한 핸들을 생성할 수 있습니다. 익명 함수는 프로그램 파일을 필요로 하지 않는, 단일 라인 표현식 기반 MATLAB 함수입니다. 함수의 본문, anonymous_function, 익명 함수 arglist에 대한 입력 인수의 쉼표로 구분된 목록 등을 정의하여 익명 함수에 대한 핸들을 생성합니다. 구문은 다음과 같습니다.

h = @(arglist)anonymous_function

예를 들어, 숫자의 제곱을 계산하는 익명 함수에 대한 핸들 sqr을 생성하고, 해당 핸들을 사용하여 익명 함수를 호출합니다.

sqr = @(n) n.^2;
x = sqr(3)
x =

     9

자세한 내용은 익명 함수 항목을 참조하십시오.

함수 핸들로 구성된 배열

함수 핸들을 셀형 배열이나 구조체형 배열에 모아서 함수 핸들로 구성된 배열을 생성할 수 있습니다. 예를 들어, 다음 셀형 배열을 사용합니다.

C = {@sin, @cos, @tan};
C{2}(pi)
ans =

    -1

또는 다음 구조체형 배열을 사용합니다.

S.a = @sin;  S.b = @cos;  S.c = @tan;
S.a(pi/2)
ans =

     1

함수 핸들 저장이나 불러오기

여타의 변수와 같은 방식으로 MATLAB에서 함수 핸들을 저장하고 불러올 수 있습니다. 즉, save 함수와 load 함수를 사용할 수 있습니다. 함수 핸들을 저장하는 경우 MATLAB은 절대 경로 정보를 저장합니다. MATLAB이 도달할 수 있는 모든 위치에서 함수를 호출할 수 있습니다. 단, 함수의 파일이 여전히 이 위치에 있어야 합니다. 핸들 생성 후 파일 위치나 파일 이름이 변경되는 경우에도 핸들이 유효하지 않게 됩니다. 핸들이 유효하지 않을 경우 파일을 불러올 때 MATLAB에서 경고를 표시할 수 있습니다. 유효하지 않은 핸들을 불러오는 경우 MATLAB에서 오류가 발생합니다.

참고 항목

| | | |

관련 예제

세부 정보