이벤트 핸들러와 콜백의 차이점
이벤트 핸들러와 콜백 함수의 차이점은 무엇입니까?
일반적으로 '콜백'은 감지 프로세스의 제어를받습니다. 따라서 GUI 관리자에게 " myaction
이 버튼을 눌렀을 때 호출"이라고 말하면 GUI 관리자 가 버튼을 눌렀을 때 작업을 호출합니다.
반면에 이벤트 핸들러는 제거 된 한 단계에서 작동합니다. GUI 관리자는 이벤트 처리기에 메시지를 보내도록 구성됩니다. 버튼 누름은 myaction
프로그램에서 처리한다고 이벤트 관리자에게 알립니다 . 버튼을 누르면 GUI 관리자가 이벤트 핸들러의 큐에 메시지를 넣고 GUI 관리를 시작합니다. 이벤트 핸들러는 큐에서 메시지를 선택하고, 버튼 누름인지 확인하고, myaction
프로그램을 실행하고 , 다음 이벤트 처리로 이동합니다. 일반적으로 myaction
프로그램은 독립적 인 스레드 또는 별도의 프로세스로 실행됩니다.
"이벤트 처리기"패턴은 더 복잡하지만 훨씬 더 강력하고 작업이 실패 할 때 중단 될 가능성이 적습니다. 또한 더 반응이 빠른 GUI를 만듭니다.
콜백은 다른 프로 시저에 인수로 전달하는 프로 시저입니다. 매개 변수를 수신하는 프로시 저는이를 호출하거나 시스템의 다른 프로 시저가 호출 할 수 있도록 공유 할 수 있습니다.
이벤트 핸들러는 이벤트가 발생할 때 호출되는 프로 시저입니다. 콜백 일 수 있습니다.
이벤트 핸들러는 콜백 유형입니다. 이벤트가 발생할 때마다 호출됩니다. 이 용어는 일반적으로 이벤트가 마우스 이동, 무언가 클릭 등과 같은 사용자 인터페이스 측면에서 사용됩니다.
콜백 (위키 백과에서) : "다른 코드에 인수로 전달되는 실행 가능한 코드".
이벤트 핸들러 (다시 Wikipedia) : "프로그램에서 수신 된 입력을 처리하는 비동기 콜백 서브 루틴".
제가 항상 이해했던 방식입니다. 이벤트 핸들러는 매우 특정한 유형의 콜백입니다.
이 질문은 매우 오래되었지만 MSDN의 링크가 매우 흥미 롭다 는 것을 알았습니다 . 나는이 질문에 우연히 발견되는 다른 누군가 가이 링크에서 무언가를 얻길 바랍니다.
이벤트 -서버 (직원)와 클라이언트 (보스)를 생각하면 한 직원이 여러 보스를 가질 수 있습니다. Employee가 작업을 완료하면 이벤트를 제기하고 Bosses는 Employee 이벤트를들을 지 여부를 결정할 수 있습니다. 직원은 게시자이고 보스는 구독자입니다.
콜백 -보스는 특히 직원에게 작업을 수행하도록 요청했으며 작업이 끝나면 보스는 알림을 받기를 원합니다. 직원은 작업이 완료되면 모든 보스가 필요하지 않고 요청한 보스에게만 알리도록합니다. 직원은 부분 작업이 완료된 경우 상사에게 알리지 않습니다. 모든 작업이 완료된 후에 만 가능하며, 한 사장 만이 정보를 요청했고 직원은 한 사장에게만 답장을 올렸습니다.
이것의 또 다른 측면은 이벤트가 과거에 일어난 일을 설명하는 반면 콜백은 종종 무언가가 발생하는 동안 사용된다는 것입니다.
이벤트가 발생하면 어떤 일이 발생했다는 알림을받습니다. 콜백을 사용하면 무언가에 참여하라는 메시지가 표시됩니다.
라이브러리 또는 프레임 워크는 어떤 일이 발생했음을 알려주는 이벤트를 발행 할 수 있습니다. 프레임 워크는 프로세스에 적극적으로 참여할 수 있도록 코드 (아마도 콜백)를 플러그인 할 수있는 지점을 제공합니다.
문제의 일부는 이벤트, 콜백이 더 추상적 인 프로세스뿐만 아니라 기술적 mcehanism을 참조한다는 것입니다.
James Anderson의 답변이 가장 자세합니다. 그의 대답을 확장합니다. 콜백은 메서드에 인수로 전달되고 나중에 비동기 적으로 호출되는 모든 코드를 나타냅니다. 그러나 콜백은 콜백 프로세스 자체를 구현하는 방법을 정의하지 않습니다. 여기서 콜백 분류가 시작됩니다. 전통적으로 콜백 프로세스는 다음과 같습니다.
- 개발자는 콜백을 정의하고이를 라이브러리 정의 함수 (호출 프로세스 또는 감지 프로세스가 호출 할 수 있도록 콜백으로 수행 할 작업을 아는 함수)에 전달합니다.
var server = require('http').createServer(function(req, res){/* your code */});
가 createServer
만드는 라이브러리 정의 함수는 반드시 검출 처리는이 경우에 올바른 콜백을 호출 얻을 수있다function(req, res){/* your code */}
- 런타임 동안 감지 프로세스는 콜백의 직접 위치를 수신하고 (라이브러리 정의 함수가 사용자를 위해 수행했기 때문에)이를 호출합니다. 이것은 두 가지를 의미합니다.
- 라이브러리 개발자는 항상 다른 감지 프로세스를 처리하는 방법을 알아야합니다. 각 프로세스는 콜백 방식이 다를 수 있습니다.
- 콜백을 여러 번 호출해야하는 경우 감지 프로세스를 수행 할 수 있습니다. 예를 들어, 탐지 프로세스가 GUI 프로세스 인 경우 GUI 스레드가 가능한 한 적은 작업으로 실행되기를 원할 것입니다.
따라서 다음 두 가지 문제를 해결하는 콜백 메커니즘을 구현해야합니다.
- 라이브러리 함수가 콜백을 등록하고 이러한 등록 된 콜백을 호출해야하는시기를 알리는 감지 프로세스에 대한 동시 지점을 정의하는 외부 프로세스.
- 즉,이 두 프로세스의 개발자는 이제 서로의 방식을 실제로 알지 못해도 서로 독립적으로 작업 할 수 있습니다.
- 이 외부 프로세스는 이벤트 루프 (예 : 노드에서)로 알려지게되었습니다. '이벤트'라는 용어는 단순히 감지 프로세스에 의해 이벤트 루프를 알리는 프로세스이며 등록 된 콜백은 이벤트 핸들러로 알려지게되었습니다.
- 외부 프로세스 (또는 이벤트 루프)는 이벤트를 큐에 넣고 실행하여 감지 프로세스의 부하를 덜어 이제 가장 잘하는 작업으로 다시 시작할 수 있습니다.
따라서 여러 번 발생한 이벤트의 경우 이벤트 루프 또는 이벤트 핸들러가 콜백을 구현하는 방법이 된 반면, 원래 콜백은 감지 프로세스를 실제로 작업하지 않고 이벤트 가 필요하지 않기 때문에 일회성 이벤트에 여전히 선호됩니다. 효율적이지 않기 때문에 하나의 이벤트에 대한 루프.
- 위의 노드 js 코드는 일회성 이벤트이며 (클라이언트 서버에 대한 연결은 일회성 이벤트이지만 이벤트 핸들러로 구현되는 많은 응답이있을 수 있으므로) 간단한 콜백의 예입니다.
이 모든 답변이 서로 다른 점을 좋아합니다.
용어의 관점에서 볼 때 이벤트와 콜백은 상호 교환이 가능하다는 결론을 내릴 수 있습니다. 특정 프로그래밍 언어 또는 프레임 워크에서 의미하는 바는 다르지만 모든 플랫폼이 선호하는 용어를 선택하는 경향이 있기 때문입니다.
기본 메커니즘은 비슷하지만 의미는 다릅니다. 콜백과 이벤트 핸들러는 모두 비동기 적 으로 호출 됩니다.
콜백 함수는 일반적으로 일부 정보를 요청하기 위해 호출자 루틴에서 명시 적으로 전달됩니다. 정보는 얼마 후 반환되며 호출 수신자가 콜백에 인수로 다시 전달합니다. 이때 호출 루틴은 업무를 완료합니다. 종종 콜백은 클로저입니다-구문 상 호출 루틴 내부에 있으며 종종 이름이 지정되지 않습니다 (익명). 자바 스크립트에서 아래와 같이 보일 수 있습니다.
function caller() {
someLibrary.getMeSomething(arg1, arg2, function(returnedData) {
// this is the callback which will do something with returnedData
});
}
따라서 피 호출자 (someLibrary.getMeSomething)에게 익명의 콜백 함수가 제공되고 얼마 후이 함수는 returnedData로 호출됩니다. 콜백은 단일 수신자에 대한 단발 이벤트와 같습니다.
Events handlers are also 'called back', but generally they are used over an extended period for multiple events, like mouse clicks, network events etc. Also, multiple objects may be interested in the same event. For these reasons, you generally 'subscribe' or 'register' to events in setup code (like object initialisation), and the event handler is more typically a named method. Usually too, each event type is identified as a constant or string.
So in Python it might look like:
class MyUIClass:
def __init__(self):
someUILib.register(someUILib.events.MOUSE_CLICK, self.my_mouse_click_handler);
def my_mouse_click_handler(self, eventInfo):
# do something with event
if eventInfo.x < 100:
print 'You clicked in the margin'
A callback is function(method) you pass as an argument to another function(method). The function(method) receiving the parameter can call it, or share it so some other function(method) in the system can call it.
An event handler is a function(method) called when an event happens. It can be a callback.
Event handler is a callback from the system.
참고URL : https://stackoverflow.com/questions/2069763/difference-between-event-handlers-and-callbacks
'programing tip' 카테고리의 다른 글
javascript에서 URL 체계가 지원되는지 확인 (0) | 2020.12.04 |
---|---|
Python 예외에 대한 모범 사례? (0) | 2020.12.04 |
jaxb 비 정렬 화 타임 스탬프 (0) | 2020.12.04 |
Oracle Database Express를위한 무료 GUI 관리 도구가 있습니까? (0) | 2020.12.04 |
변수가 숫자인지 문자열인지 확인하는 방법은 무엇입니까? (0) | 2020.12.04 |