이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

프로그래밍 방식으로 만든 앱에 대한 콜백 작성하기

여러 사용자 동작에 대한 콜백

UI 구성요소와 그래픽스 구성요소에는 특정 콜백 함수에 연결할 수 있는 속성이 있습니다. 각 속성은 특정 사용자 동작에 해당합니다. 예를 들어, uicontrol에는 Callback 속성이 있습니다. 이 속성의 값을 콜백 함수에 대한 핸들, 익명 함수 또는 MATLAB® 표현식이 포함된 문자형 벡터로 설정할 수 있습니다. 이 속성을 설정하면 사용자가 uicontrol과 상호 작용할 때 앱이 응답하게 됩니다. Callback 속성에 값을 지정하지 않으면 사용자가 uicontrol과 상호 작용할 때 어떤 동작도 일어나지 않습니다.

다음 표에는 사용할 수 있는 콜백 속성, 콜백 함수를 트리거하는 사용자 동작, 콜백 속성을 사용하는 가장 일반적인 UI 구성요소와 그래픽스 구성요소가 나열되어 있습니다.

콜백 속성

사용자 동작

이 속성을 사용하는 구성요소

ButtonDownFcn

포인터가 구성요소 또는 Figure 위에 있을 때 최종 사용자가 마우스 버튼을 누릅니다.

axes, figure, uibuttongroup, uicontrol, uipanel, uitable,

Callback

최종 사용자가 구성요소를 트리거합니다. 예를 들어, 메뉴 항목 선택, 슬라이더 이동, 누름 버튼 누르기 등이 이에 해당합니다.

uicontextmenu, uicontrol, uimenu

CellEditCallback

셀을 편집할 수 있는 테이블에서 최종 사용자가 값을 편집합니다.

uitable

CellSelectionCallback

최종 사용자가 테이블에서 셀을 선택합니다.

uitable

ClickedCallback

최종 사용자가 푸시 툴 또는 토글 툴을 마우스 왼쪽 버튼으로 클릭합니다.

uitoggletool, uipushtool

CloseRequestFcn

Figure가 닫힙니다.

figure

CreateFcn

MATLAB이 객체를 만들면 이 객체가 표시되기 전에 콜백이 실행됩니다.

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

DeleteFcn

MATLAB이 Figure를 삭제하기 직전에 콜백이 실행됩니다.

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

KeyPressFcn

포인터가 객체 위에 있을 때 최종 사용자가 키보드 키를 누릅니다.

figure, uicontrol, uipanel, uipushtool, uitable, uitoolbar

KeyReleaseFcn

포인터가 객체 위에 있을 때 최종 사용자가 키보드 키를 놓습니다.

figure, uicontrol, uitable

OffCallback

토글 툴의 State'off'로 변경될 때 실행됩니다.

uitoggletool

OnCallback

토글 툴의 State'on'으로 변경될 때 실행됩니다.

uitoggletool

SizeChangedFcn

최종 사용자가 Resize 속성이 'on'인 버튼 그룹, Figure 또는 패널의 크기를 조정합니다.

figure, uipanel, uibuttongroup

SelectionChangedFcn

최종 사용자가 버튼 그룹 내에서 여러 라디오 버튼 또는 토글 버튼을 선택합니다.

uibuttongroup

WindowButtonDownFcn

포인터가 Figure 창에 있을 때 최종 사용자가 마우스 버튼을 누릅니다.

figure

WindowButtonMotionFcn

최종 사용자가 Figure 창 내에서 포인터를 이동합니다.

figure

WindowButtonUpFcn

최종 사용자가 마우스 버튼을 놓습니다.

figure

WindowKeyPressFcn

포인터가 Figure 또는 Figure의 하위(자식) 객체 위에 있을 때 최종 사용자가 키를 누릅니다.

figure

WindowKeyReleaseFcn

포인터가 Figure 또는 Figure의 하위(자식) 객체 위에 있을 때 최종 사용자가 키를 놓습니다.

figure

WindowScrollWheelFcn

포인터가 Figure 위에 있을 때 최종 사용자가 마우스 휠을 돌립니다.

figure

콜백 속성값을 지정하는 방법

콜백 함수와 UI 구성요소를 연결하려면 구성요소의 콜백 속성값 중 하나를 콜백 함수에 대한 참조로 설정하십시오. 이는 일반적으로 구성요소를 정의할 때 사용하는 방법으로, 코드의 어느 위치에서나 콜백 속성값을 변경할 수 있습니다.

다음 방법 중 하나를 사용하여 콜백 속성값을 지정합니다.

함수 핸들 지정하기

함수 핸들을 사용하면 함수를 변수로 나타낼 수 있습니다. 함수는 앱 코드가 포함된 파일에 있는 로컬 함수 또는 중첩 함수여야 합니다. 또는 MATLAB 경로에 있는 별도의 파일 내 함수일 수 있습니다.

함수 핸들을 만들려면 함수 이름 앞에 @ 연산자를 지정하십시오. 예를 들어, 이 uicontrol 명령은 Callback 속성을 함수 pushbutton_callback에 대한 핸들로 지정합니다.

b = uicontrol('Style','pushbutton','Callback',@pushbutton_callback);

다음은 pushbutton_callback에 대한 함수 정의입니다.

function pushbutton_callback(src,event)
   display('Button pressed');
end
함수 핸들이 명시적으로 어떤 입력 인수도 참조하지 않지만 함수 선언에 2개의 입력 인수가 포함된 것을 알 수 있습니다. 함수 핸들로 지정하는 모든 콜백에 이 입력 인수 2개가 필요합니다. 콜백이 실행되면 MATLAB은 이 인수들을 자동으로 전달합니다. 첫 번째 인수는 콜백을 트리거한 UI 구성요소입니다. 두 번째 인수는 콜백 함수에 이벤트 데이터를 제공합니다. 콜백 함수에 사용할 수 있는 이벤트 데이터가 없으면 MATLAB은 두 번째 입력 인수를 빈 배열로 전달합니다. 다음 표에는 이벤트 데이터를 사용하는 콜백과 구성요소가 나열되어 있습니다.

콜백 속성 이름구성요소
WindowKeyPressFcn
WindowKeyReleaseFcn
WindowScrollWheel
figure
KeyPressFcnfigure, uicontrol, uitable
KeyReleaseFcnfigure, uicontrol, uitable
SelectionChangedFcnuibuttongroup
CellEditCallback
CellSelectionCallback
uitable

콜백을 함수 핸들로 지정할 때 좋은 점은 구성요소에 콜백을 할당하면 MATLAB이 함수에서 구문 오류와 누락된 종속성을 확인한다는 것입니다. 콜백 함수에 문제가 있으면 MATLAB은 사용자가 콜백을 트리거하기를 기다리지 않고 즉시 오류를 반환합니다. 이 동작은 최종 사용자가 문제를 겪기 전에 코드에서 미리 문제를 발견할 수 있도록 도와줍니다.

셀형 배열 지정하기

셀형 배열을 사용하여 함수에서 사용할 추가 입력 인수를 받는 콜백 함수를 지정합니다. 셀형 배열의 첫 번째 요소는 함수 핸들입니다. 셀형 배열의 다른 요소들은 사용할 추가 입력 인수로, 쉼표로 구분됩니다. 지정하는 함수는 함수 핸들 지정하기에서 설명한 것과 동일한 2개의 입력 인수를 정의해야 합니다. 하지만 함수 선언에서 처음 2개의 인수 뒤에 입력값을 추가로 정의할 수 있습니다.

다음 uicontrol 명령은 누름 버튼을 만들고 Callback 속성을 셀형 배열로 지정합니다. 이 경우, 함수 이름은 pushbutton_callback이고 추가 입력 인수의 값은 5입니다.

b = uicontrol('Style','pushbutton','Callback',{@pushbutton_callback,5});

다음은 pushbutton_callback에 대한 함수 정의입니다.

function pushbutton_callback(src,event,x)
   display(x);
end

함수 핸들로 지정된 콜백처럼, 구성요소에 콜백을 할당하면 MATLAB은 셀형 배열로 지정된 콜백에서 구문 오류와 누락된 종속성을 확인합니다. 콜백 함수에 문제가 있으면 MATLAB은 사용자가 콜백을 트리거하기를 기다리지 않고 즉시 오류를 반환합니다. 이 동작은 최종 사용자가 문제를 겪기 전에 코드에서 미리 문제를 발견할 수 있도록 도와줍니다.

익명 함수 지정하기

UI 구성요소가 함수 핸들과 셀형 배열에 필요한 2개의 인수를 지원하지 않는 함수를 실행하도록 하려면 익명 함수를 지정하십시오. 예를 들어, 다음 uicontrol 명령은 누름 버튼을 만들고 Callback 속성을 익명 함수로 지정합니다. 이 경우, 함수 이름은 myfun이고 함수 선언은 하나의 입력 인수 x만 정의합니다.

b = uicontrol('Style','pushbutton','Callback',@(src,event)myfun(x));

MATLAB 명령이 포함된 문자형 벡터 지정하기(권장되지 않음)

간단한 명령 몇 개를 실행하려는 경우에는 문자형 벡터를 지정해도 되지만, 명령 개수가 많아지면 콜백을 관리하기 힘들 수 있습니다. 지정하는 문자형 벡터는 함수에 대한 인수를 포함할 수 있는 유효한 MATLAB 표현식으로 구성되어야 합니다. 예를 들면 다음과 같습니다.

hb = uicontrol('Style','pushbutton',...
               'String','Plot line',...
               'Callback','plot(rand(20,3))');
문자형 벡터 'plot(rand(20,3))'은 유효한 명령이기 때문에, 사용자가 버튼을 클릭하면 MATLAB이 이 명령을 실행합니다. 다음은 문자형 벡터에 변수가 포함된 예입니다.
'plot(x)'
사용자가 콜백을 트리거할 때 변수 x는 기본 작업 공간에 있어야 합니다. 그렇지 않으면 오류가 반환됩니다. 콜백 속성값을 할당할 때는 변수가 존재하지 않아도 되지만, 사용자가 콜백을 트리거할 때는 변수가 존재해야 합니다.

함수 핸들이나 셀형 배열로 지정된 콜백과 달리, 문자형 벡터에서는 MATLAB이 구문 오류 또는 누락된 종속성을 확인하지 않습니다. MATLAB 표현식에 문제가 있어도 사용자가 콜백을 트리거할 때까지 발견되지 않습니다.

관련 항목