Main Content

이벤트 및 리스너 개요

이벤트와 리스너를 사용하는 이유

이벤트는 속성값 변경이나 애플리케이션과의 사용자 상호 작용 등과 같이 발생하는 동작에 대한 응답으로 객체가 브로드캐스트하는 알림입니다. 관련 이벤트가 발생했다는 알림이 수신되면 리스너가 함수를 실행합니다. 이벤트를 사용하여 객체에 변경 사항을 전달할 수 있습니다. 리스너는 콜백 함수를 실행하여 응답합니다.

자세한 내용은 이벤트 및 리스너 개념 항목을 참조하십시오.

이벤트와 리스너 관련 기본 사항

이벤트와 리스너를 사용할 때에는 다음 사항을 참고하십시오.

  • handle 클래스만 이벤트와 리스너를 정의할 수 있습니다.

  • 클래스 정의의 events 블록에서 이벤트 이름을 정의합니다(이벤트와 리스너 구문).

  • 이벤트에 대한 액세스를 지정하려면 이벤트 특성을 사용합니다(이벤트 특성).

  • 이벤트를 트리거하려면 핸들 notify 메서드를 호출합니다. 이벤트 알림은 해당 이벤트에 등록된 모든 리스너에 명명된 이벤트를 브로드캐스트합니다.

  • 이벤트 소스 객체에 리스터를 연결하려면 핸들 addlistener 메서드를 사용합니다. 이벤트의 소스가 소멸되면 MATLAB®이 리스너를 소멸시킵니다.

  • 이벤트 소스 객체의 라이프사이클에 연결되지 않은 리스너를 생성하려면 핸들 listener 메서드를 사용합니다. 이벤트 소스와 리스너를 각기 다른 컴포넌트에 정의하여 개별적으로 추가, 제거, 수정하도록 하려면 이 방식이 유용합니다. 리스너 객체의 라이프사이클은 애플리케이션 코드에서 제어합니다.

  • 리스너 콜백 함수는 적어도 두 개의 입력 인수인 이벤트 소스 객체 핸들과 이벤트 데이터를 정의해야 합니다(자세한 내용은 리스너 콜백 구문 참조).

  • event.EventData 클래스를 서브클래스화하여 각 리스너 콜백에 전달된 데이터를 수정합니다.

미리 정의된 이벤트

MATLAB은 속성 설정 및 쿼리를 수신 대기하는 이벤트를 정의합니다. 자세한 내용은 속성값에 대한 변경 사항 수신 대기하기 항목을 참조하십시오.

모든 핸들 객체는 ObjectBeingDestroyed라는 이벤트를 정의합니다. MATLAB은 클래스 소멸자를 호출하기 전에 이 이벤트를 트리거합니다.

이벤트 구문

events 코드 블록에 이벤트 이름을 정의합니다.

classdef ClassName < handle
   events
      EventName
   end
end

예를 들어, MyClassStateChange라는 이벤트를 정의합니다.

classdef MyClass < handle
   events
      StateChange
   end
end

handle 클래스의 notify 메서드를 사용하여 이벤트를 트리거합니다.

classdef ClassName < handle
   events
      EventName
   end

   methods
      function anyMethod(obj)
         notify(obj,'EventName');
      end
   end
end

함수 또는 메서드는 이벤트를 정의하는 클래스의 특정 인스턴스에 대해 이벤트를 트리거할 수 있습니다. 예를 들어, triggerEvent 메서드는 notify를 호출하여 StateChange 이벤트를 트리거합니다.

classdef MyClass < handle
   events
      StateChange
   end
   methods
      function triggerEvent(obj)
         notify(obj,'StateChange')
      end
   end
end

triggerEvent 메서드를 사용하여 StateChange 이벤트를 트리거합니다.

obj = MyClass;
obj.triggerEvent

자세한 내용은 이벤트와 리스너 구문 항목을 참조하십시오.

리스너 만들기

handle 클래스의 addlistener 메서드 또는 listener 메서드를 사용하여 리스너를 정의합니다. 다음 구문 중 하나를 사용하여 리스너 콜백 함수에 대한 함수 핸들을 전달합니다.

  • addlistener(SourceOfEvent,'EventName',@functionName) — 일반 함수에 사용합니다.

  • addlistener(SourceOfEvent,'EventName',@Obj.methodName)Obj의 메서드에 사용합니다.

  • addlistener(SourceOfEvent,'EventName',@ClassName.methodName)ClassName 클래스의 정적 메서드에 사용합니다.

ListenerObject = addlistener(SourceOfEvent,'EventName',@listenerCallback);

addlistener는 리스너 객체를 반환합니다. 입력 인수는 다음과 같습니다.

  • SourceOfEvent — 이벤트를 정의하는 클래스의 객체입니다. 이 객체에서 이벤트가 트리거됩니다.

  • EventName — 클래스의 events 코드 블록에 정의되는 이벤트의 이름입니다.

  • @listenerCallback — 이벤트에 대한 응답으로 실행되는 함수를 참조하는 함수 핸들입니다.

예를 들어, StateChange 이벤트에 대한 리스너 객체를 생성해 보겠습니다.

function lh = createListener(src)
   lh = addlistener(src,'StateChange',@handleStateChange)
end

리스너에 대한 콜백 함수를 정의합니다. 콜백 함수는 처음 두 개의 인수로 이벤트 소스 객체와 이벤트 데이터 객체를 받아야 합니다. 이벤트 소스 인수를 사용하여 이벤트를 트리거한 객체에 액세스합니다. 이벤트 데이터 객체를 사용하여 이벤트에 대한 정보를 찾습니다.

function handleStateChange(src,eventData)
   % src - handle to object that triggered the event
   % eventData - event.EventData object containing 
   %             information about the event.   
   ...
end

자세한 내용은 리스너 콜백 구문 항목을 참조하십시오.

참고 항목

|

관련 항목