프로그래밍 방식으로 만든 앱에 대한 콜백 만들기
앱 사용자의 입력에 반응하도록 앱의 UI 컴포넌트를 프로그래밍하려면 해당 UI 컴포넌트에 대한 콜백 함수를 만드십시오. 콜백 함수는 버튼 클릭과 같은 사용자 상호 작용에 대한 응답으로 실행되는 함수입니다. 모든 UI 컴포넌트에는 각각 특정 동작에 해당하는 여러 콜백 속성이 있습니다. 사용자가 앱을 실행하고 이러한 동작 중 하나를 수행하면 MATLAB®은 연결된 콜백 속성에 할당된 함수를 실행합니다.
예를 들어, 앱에 버튼이 포함된 경우 사용자가 이 버튼을 클릭하면 앱이 업데이트되도록 하고자 할 수 있습니다. 이렇게 하려면 업데이트를 수행하는 함수를 작성한 다음, 버튼의 ButtonPushedFcn
속성을 이 함수에 대한 핸들로 설정하면 됩니다. 컴포넌트를 만들 때 콜백 함수를 콜백 속성에 이름-값 인수로 할당하거나, 코드의 어느 곳에서나 점 표기법을 사용하여 속성을 설정할 수 있습니다.
UI 컴포넌트의 콜백 속성을 확인하려면 해당 UI 컴포넌트의 속성 페이지를 참조하십시오.
콜백 함수 인수
UI 컴포넌트가 콜백 함수를 실행할 때 MATLAB은 두 개의 입력 인수를 자동으로 함수에 전달합니다. 이러한 입력 인수는 종종 src
및 event
로 명명됩니다. 첫 번째 인수는 콜백을 트리거한 UI 컴포넌트입니다. 두 번째 인수는 콜백 함수에 이벤트 데이터를 제공합니다. 제공되는 이벤트 데이터는 해당 콜백 속성 및 컴포넌트 유형에만 해당합니다. 콜백 속성과 관련된 이벤트 데이터를 확인하려면 콜백을 실행하는 UI 컴포넌트의 속성 페이지를 참조하십시오.
예를 들어, updateDropDown
함수는 사용자가 새 값을 입력할 경우 이러한 콜백 입력값을 사용하여 편집 가능한 드롭다운 메뉴에 항목을 추가합니다. 드롭다운이 addItems
콜백을 실행하면 src
는 해당 드롭다운 컴포넌트를 포함하고 event
는 상호 작용에 대한 정보를 포함합니다. 이 함수는 event.Edited
속성을 사용하여 값이 사용자가 입력한 새 값인지 또는 기존 항목인지 확인합니다. 그런 다음, 값이 새 값인 경우 이 함수는 event.Value
속성을 사용하여 드롭다운 항목에 값을 추가합니다.
이 함수를 실행하려면 함수를 MATLAB 경로에 있는 updateDropDown.m
이라는 파일로 저장합니다. 드롭다운 메뉴에 새 값을 입력하고 Enter 키를 누르면 업데이트된 드롭다운 항목이 표시됩니다.
function updateDropDown fig = uifigure('Position',[500 500 300 200]); dd = uidropdown(fig, ... 'Editable','on', ... 'Items',{'Red','Green','Blue'}, ... 'ValueChangedFcn',@addItems); end function addItems(src,event) val = event.Value; if event.Edited src.Items{end+1} = val; end end
콜백 함수 지정하기
다음 방법으로 콜백 함수를 콜백 속성에 할당하십시오.
함수 핸들 지정하기 — 콜백에 추가 입력 인수가 필요하지 않은 경우 이 방법을 사용합니다.
셀형 배열 지정하기 — 콜백에 추가 입력 인수가 필요한 경우 이 방법을 사용합니다. 셀형 배열에는 함수 핸들이 첫 번째 요소로 오고 함수에서 사용할 입력 인수가 그 뒤에 옵니다.
익명 함수 지정하기 — 콜백 코드가 단순하거나 항상 콜백으로 실행되지는 않는 함수를 재사용하는 경우 이 방법을 사용합니다.
함수 핸들 지정하기
함수 핸들은 함수를 변수로 나타낼 수 있습니다. 함수는 앱 코드와 동일한 파일에 있는 로컬 함수나 중첩 함수 또는 MATLAB 경로에 있는 별도의 파일에 정의된 함수일 수 있습니다. 함수 핸들을 만들려면 함수 이름 앞에 @
연산자를 지정합니다.
예를 들어, 클릭에 반응하는 버튼을 만들려면 다음 함수를 MATLAB 경로에 있는 codeButtonResponse.m
이라는 파일에 저장합니다. 이 코드는 uibutton
함수를 사용하여 버튼을 만들고 ButtonPushedFcn
속성을 함수 buttonCallback
에 대한 핸들로 설정합니다. 그리고 표기법 @buttonCallback
을 사용하여 이 핸들을 만듭니다. 참고로, 함수 핸들이 명시적으로 어떤 입력 인수도 참조하지 않지만 함수 선언에는 src
입력 인수 및 event
입력 인수가 포함됩니다.
function codeButtonResponse fig = uifigure('Position',[500 500 300 200]); btn = uibutton(fig,'ButtonPushedFcn',@buttonCallback); function buttonCallback(src,event) disp('Button pressed'); end end
콜백을 함수 핸들로 지정하면 사용자가 콜백 함수를 컴포넌트에 할당할 때 MATLAB이 각 콜백 함수에 구문 오류와 누락된 종속 관계가 있는지 확인한다는 이점이 있습니다. 콜백 함수에 문제가 있는 경우 MATLAB은 사용자가 콜백을 트리거하기를 기다리는 대신 즉시 오류를 반환합니다. 이 동작은 사용자에게 문제가 발생하기 전에 코드에서 문제를 찾는 데 도움이 됩니다.
셀형 배열 지정하기
모든 콜백은 소스와 이벤트에 대해 두 개의 입력 인수를 받습니다. 이 두 개 이외의 추가 입력 인수를 받는 콜백을 지정하려면 셀형 배열을 사용합니다. 셀형 배열의 첫 번째 요소는 함수 핸들입니다. 셀형 배열의 그 외 요소는 사용할 추가 입력 인수로, 쉼표로 구분됩니다. 지정하는 함수는 함수 핸들 지정하기 항목에 설명된 대로 소스 인수와 이벤트 인수를 처음 두 개의 입력 인수로 받아야 합니다. 하지만 함수 선언에서 이 처음 두 개의 인수 다음에 추가 입력값을 정의할 수 있습니다.
예를 들어, codeComponentResponse
함수가 버튼과 체크박스 컴포넌트를 생성하는데, 이 두 컴포넌트 모두 동일한 콜백을 사용하지만 각 함수에 서로 다른 인수를 전달합니다. 서로 다른 컴포넌트에 대해 서로 다른 입력 인수를 지정하려면 두 컴포넌트의 콜백 속성을 셀형 배열로 설정하십시오. 셀형 배열의 첫 번째 요소는 componentCallback
함수에 대한 핸들이고 두 번째 요소는 함수에 전달할 추가 입력 인수입니다.
이 예제를 실행하려면 함수를 MATLAB 경로에 있는 codeComponentResponse.m
이라는 파일로 저장하십시오. 체크박스를 선택하거나 선택 해제하면 MATLAB이 You clicked the check box
를 표시합니다. 버튼을 클릭하면 MATLAB이 You clicked the button
을 표시합니다.
function codeComponentResponse fig = uifigure('Position',[500 500 300 200]); cbx = uicheckbox(fig,'Position',[100 125 84 22], ... 'ValueChangedFcn',{@componentCallback,'check box'}); btn = uibutton(fig,'Position',[100 75 84 22], ... 'ButtonPushedFcn',{@componentCallback,'button'}); function componentCallback(src,event,comp) disp(['You clicked the ' comp]); end end
함수 핸들로 지정된 콜백과 같이, 사용자가 셀형 배열로 지정된 콜백을 컴포넌트에 할당하면 MATLAB은 그 콜백에 구문 오류와 누락된 종속 관계가 있는지 확인합니다. 콜백 함수에 문제가 있는 경우 MATLAB은 사용자가 콜백을 트리거하기를 기다리는 대신 즉시 오류를 반환합니다. 이 동작은 사용자에게 문제가 발생하기 전에 코드에서 문제를 찾는 데 도움이 됩니다.
익명 함수 지정하기
익명 함수는 프로그램 파일에 저장되지 않는 함수입니다. 다음과 같은 경우 익명 함수를 지정하십시오.
함수 핸들과 셀형 배열에 필요한 두 개의 소스 인수와 이벤트 인수를 지원하지 않는 함수를 UI 컴포넌트가 실행하도록 만들려는 경우.
UI 컴포넌트가 스크립트를 실행하도록 만들려는 경우.
콜백이 하나의 실행 가능 명령문으로 구성된 경우.
익명 함수를 지정하려면 콜백 함수, 스크립트 또는 명령문을 실행하는 함수 핸들을 두 개의 필수 인수인 소스 입력 인수와 이벤트 입력 인수를 포함하여 만드십시오.
예를 들어, changeSlider
함수는 슬라이더 UI 컴포넌트와 슬라이더 값을 증가시키는 버튼을 만듭니다. incrementSlider
함수는 콜백 내부 또는 외부에서 호출할 수 있도록 설계되었기 때문에 소스 입력 인수와 이벤트 입력 인수를 갖지 않습니다. 버튼을 누를 때 incrementSlider
를 실행하려면 src
입력 인수와 event
입력 인수를 받지만 이를 무시하고 incrementSlider
를 실행하는 익명 함수를 만듭니다.
changeSlider
함수를 실행하려면 아래 코드를 MATLAB 경로에 있는 changeSlider.m
이라는 파일로 저장하십시오.
function changeSlider fig = uifigure('Position',[500 500 300 200]); s = uislider(fig,'Position',[75 150 150 3]); incrementSlider; b = uibutton(fig,'Position',[100 50 100 22], ... 'Text','Increment', ... 'ButtonPushedFcn',@(src,event)incrementSlider); function incrementSlider if s.Value < s.Limits(2) s.Value = s.Value + 1; end end end
콜백이 하나의 실행 가능 명령문인 경우 명령문에 대해 별도의 함수를 정의할 필요가 없도록 콜백을 익명 함수로 지정할 수 있습니다. 예를 들어, 다음은 콜백을 익명 함수로 지정하여 버튼이 클릭될 때 Button pressed
를 표시하는 버튼을 만드는 코드입니다.
fig = uifigure('Position',[500 500 300 200]); btn = uibutton(fig,'ButtonPushedFcn',@(src,event)disp('Button pressed'));
함수 핸들 또는 셀형 배열로 지정된 콜백과 달리, 익명 함수로 지정된 콜백을 컴포넌트에 할당할 경우 MATLAB은 해당 콜백에 구문 오류와 누락된 종속 관계가 있는지 확인하지 않습니다. 익명 함수에 문제가 있는 경우 사용자가 콜백을 트리거할 때까지 문제가 발견되지 않은 상태로 남아 있습니다.
MATLAB 명령을 포함하는 텍스트 지정하기(권장되지 않음)
몇 개의 간단한 명령을 실행하려는 경우 콜백을 문자형 벡터 또는 string형 스칼라로 지정할 수 있지만, 콜백에 명령이 여러 개 포함되어 있으면 콜백을 관리하기 어려울 수 있습니다. 함수 핸들 또는 셀형 배열로 지정된 콜백과 달리, MATLAB은 문자형 벡터나 string형에 구문 오류와 누락된 종속 관계가 있는지 확인하지 않습니다. MATLAB 표현식에 문제가 있는 경우 사용자가 콜백을 트리거할 때까지 발견되지 않은 상태로 남아 있습니다. 지정한 문자형 벡터 또는 string형은 유효한 MATLAB 표현식으로 구성되어야 하고, 이러한 표현식은 함수에 대한 인수를 포함할 수 있습니다.
예를 들어, 아래는 UIAxes
객체와, 버튼이 클릭될 때 좌표축에 임의의 데이터를 플로팅하는 버튼을 만드는 코드입니다. 문자형 벡터 'plot(ax,rand(20,3))'
에는 변수 ax
가 포함되어 있습니다. 변수 ax
는 사용자가 콜백을 트리거할 때 기본 작업 공간에 있어야 합니다. 그렇지 않으면 MATLAB은 오류를 반환합니다. 이 변수는 사용자가 콜백 속성값을 할당할 때는 존재할 필요가 없지만 사용자가 콜백을 트리거할 때는 존재해야 합니다.
코드를 실행한 다음 버튼을 클릭하십시오. ax
가 기본 작업 공간에 존재하므로 콜백 명령은 유효하고 MATLAB은 데이터를 플로팅합니다.
fig = uifigure; ax = uiaxes(fig,'Position',[125 100 300 300]); b = uibutton(fig,'Position',[225 50 100 22], ... 'Text','Plot Data', ... 'ButtonPushedFcn','plot(ax,rand(20,3))');