속성값에 대한 변경 사항 수신 대기하기
속성 리스너 생성하기
핸들 클래스에 대해 미리 선언된 속성 이벤트(예: PreSet
, PostSet
, PreGet
, PostGet
)에 대한 리스너를 정의할 수 있습니다. 이러한 명명된 이벤트에 대해 리스너를 생성하려면 다음과 같이 하십시오.
SetObservable
및/또는GetObservable
속성 특성을 지정합니다.콜백 함수를 정의합니다.
addlistener
또는listener
에 대한 호출에 속성 이름과 이벤트를 포함시켜 속성 리스너를 생성합니다.필요한 경우,
event.data
를 서브클래스로 만들어서 콜백 함수에 전달할 이벤트 데이터 객체를 생성합니다.새 값이 현재 값과 동일한 경우 콜백이 실행되지 않도록 합니다(Assignment When Property Value Is Unchanged 참조).
속성 특성을 설정하여 속성 이벤트 활성화하기
properties 블록에서 SetObservable
특성을 활성화합니다. 이 블록에 정의된 속성에 대해 PreSet
리스너와 PostSet
리스너를 정의할 수 있습니다.
properties (SetObservable)
PropOne
PropTwo
end
속성 이벤트에 대한 콜백 함수 정의하기
MATLAB®이 속성 이벤트를 트리거하면 리스너가 콜백 함수를 실행합니다. 두 개의 특정 인수를 갖도록 콜백 함수를 정의합니다. 이 두 인수는 함수가 리스너에 의해 호출될 때 함수에 자동으로 전달됩니다.
이벤트 소스 — 속성 이벤트의 소스인 객체를 설명하는
meta.property
객체이벤트 데이터 — 이벤트 관련 정보를 포함하는
event.PropertyEvent
객체
필요한 경우 추가 인수를 전달할 수 있습니다. 이 두 인수는 속성에 가장 필요한 정보를 포함하므로 대개의 경우 쉽게 이 메서드를 Static
으로 정의할 수 있습니다.
예를 들어, handlePropEvents
함수가 또 다른 클래스 객체의 두 속성에 대한 리스너를 생성하는 클래스의 정적 메서드라고 가정하겠습니다.
methods (Static) function handlePropEvents(src,evnt) switch src.Name case 'PropOne' % PropOne has triggered an event case 'PropTwo' % PropTwo has triggered an event end end end
또는 switch
문에 event.PropertyEvent
객체의 EventName
속성을 사용하여 이벤트 이름(이 경우 PreSet
또는 PostSet
)을 비활성화할 수 있습니다.
Class Metadata에 meta.property
클래스에 대한 자세한 내용이 나와 있습니다.
리스너를 속성에 추가하기
addlistener
핸들 클래스 메서드를 사용하면 리스너 객체를 영속 변수로 저장하지 않고 리스너를 속성에 연결할 수 있습니다. 속성 이벤트에 대해서는 네 개의 인수를 갖는 addlistener
구문을 사용하십시오.
다음은 addlistener
에 대한 호출입니다.
addlistener(EventObject,'PropOne','PostSet',@ClassName.handlePropertyEvents);
인수는 다음과 같습니다.
EventObject
— 이벤트를 생성하는 객체의 핸들PropOne
— 수신 대기하려는 속성의 이름PostSet
— 수신 대기하려는 이벤트의 이름@
— 정적 메서드를 참조하는 함수 핸들(클래스 이름을 사용해야 함)ClassName
.handlePropertyEvents
리스너 콜백이 일반 메서드이고 정적 메서드가 아닌 경우 구문은 다음과 같습니다.
addlistener(EventObject,'PropOne','PostSet',@obj.handlePropertyEvents);
여기서 obj
는 콜백 메서드를 정의하는 객체의 핸들입니다.
리스너 콜백이 클래스 메서드 유형의 함수가 아니라면 해당 함수에 대한 함수 핸들을 전달해야 합니다. 콜백 함수가 패키지 함수라고 가정하면 다음과 같이 해야 합니다.
addlistener(EventObject,'PropOne','PostSet',@package.handlePropertyEvents);
함수를 인수로 전달하는 방법에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.
속성 이벤트 및 리스너 클래스
다음 두 클래스에서는 PropOne
과 PropTwo
, 두 속성에 대한 PostSet
속성 리스너를 생성하는 방법을 보여줍니다.
이벤트를 생성하는 클래스
PropEvent
클래스를 사용하면 SetObservable
속성 특성을 지정하여 속성의 PreSet
및 PostSet
이벤트를 트리거할 수 있습니다. 또한 이 속성은 AbortSet
특성을 활성화하며, 이 특성은 속성이 현재 값과 동일한 값으로 설정된 경우 속성 이벤트가 트리거되지 않게 합니다(Assignment When Property Value Is Unchanged 참조).
classdef PropEvent < handle properties (SetObservable, AbortSet) PropOne PropTwo end methods function obj = PropEvent(p1,p2) if nargin > 0 obj.PropOne = p1; obj.PropTwo = p2; end end end end
리스너를 정의하는 클래스
PropListener
클래스는 다음 두 리스너를 정의합니다.
속성
PropOne
의PostSet
이벤트속성
PropTwo
의PostSet
이벤트
비슷한 방법으로 다른 이벤트나 다른 속성에 대한 리스너를 정의할 수 있습니다. 각 리스너에 동일한 콜백 함수를 사용할 필요는 없습니다. 리스너 콜백 함수에 전달된 인수에 포함되는 정보에 대한 자세한 내용은 meta.property
및 event.PropertyEvent
함수 도움말 페이지를 참조하십시오.
classdef PropListener < handle % Define property listeners methods function obj = PropListener(evtobj) if nargin > 0 addlistener(evtobj,'PropOne','PostSet',@PropListener.handlePropEvents); addlistener(evtobj,'PropTwo','PostSet',@PropListener.handlePropEvents); end end end methods (Static) function handlePropEvents(src,evnt) switch src.Name case 'PropOne' sprintf('PropOne is %s\n',num2str(evnt.AffectedObject.PropOne)) case 'PropTwo' sprintf('PropTwo is %s\n',num2str(evnt.AffectedObject.PropTwo)) end end end end