Main Content

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

앱 사용자의 입력에 반응하도록 앱의 UI 컴포넌트를 프로그래밍하려면 해당 UI 컴포넌트에 대한 콜백 함수를 만드십시오. 콜백 함수는 버튼 클릭과 같은 사용자 상호 작용에 대한 응답으로 실행되는 함수입니다. 모든 UI 컴포넌트에는 각각 특정 동작에 해당하는 여러 콜백 속성이 있습니다. 사용자가 앱을 실행하고 이러한 동작 중 하나를 수행하면 MATLAB®은 연결된 콜백 속성에 할당된 함수를 실행합니다.

예를 들어, 앱에 버튼이 포함된 경우 사용자가 이 버튼을 클릭하면 앱이 업데이트되도록 하고자 할 수 있습니다. 이렇게 하려면 업데이트를 수행하는 함수를 작성한 다음, 버튼의 ButtonPushedFcn 속성을 이 함수에 대한 핸들로 설정하면 됩니다. 컴포넌트를 만들 때 콜백 함수를 콜백 속성에 이름-값 인수로 할당하거나, 코드의 어느 곳에서나 점 표기법을 사용하여 속성을 설정할 수 있습니다.

UI 컴포넌트의 콜백 속성을 확인하려면 해당 UI 컴포넌트의 속성 페이지를 참조하십시오.

콜백 함수 인수

UI 컴포넌트가 콜백 함수를 실행할 때 MATLAB은 두 개의 입력 인수를 자동으로 함수에 전달합니다. 이러한 입력 인수는 종종 srcevent로 명명됩니다. 첫 번째 인수는 콜백을 트리거한 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

A UI figure window with a label and drop-down. The drop-down value is "Purple", and the items contain "Purple" as an option.

콜백 함수 지정하기

다음 방법으로 콜백 함수를 콜백 속성에 할당하십시오.

함수 핸들 지정하기

함수 핸들은 함수를 변수로 나타낼 수 있습니다. 함수는 앱 코드와 동일한 파일에 있는 로컬 함수나 중첩 함수 또는 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

A UI figure window with a button component.

콜백을 함수 핸들로 지정하면 사용자가 콜백 함수를 컴포넌트에 할당할 때 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

A UI figure window with a check box component above a button component.

함수 핸들로 지정된 콜백과 같이, 사용자가 셀형 배열로 지정된 콜백을 컴포넌트에 할당하면 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

A UI figure window with a slider component with a value of 1, and a button below the slider with the text "Increment".

콜백이 하나의 실행 가능 명령문인 경우 명령문에 대해 별도의 함수를 정의할 필요가 없도록 콜백을 익명 함수로 지정할 수 있습니다. 예를 들어, 다음은 콜백을 익명 함수로 지정하여 버튼이 클릭될 때 Button pressed를 표시하는 버튼을 만드는 코드입니다.

fig = uifigure('Position',[500 500 300 200]);
btn = uibutton(fig,'ButtonPushedFcn',@(src,event)disp('Button pressed'));

A UI figure window with a button component.

함수 핸들 또는 셀형 배열로 지정된 콜백과 달리, 익명 함수로 지정된 콜백을 컴포넌트에 할당할 경우 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))');

A UI figure window with an axes and a button component. The button text says "Plot Data". The axes has three lines of random data displayed on it.

관련 항목