콜백 함수 란
콜백 함수는 나중에 수신 함수에 의해 호출될 것으로 예상되며 다른 함수에 인수로 전달되는 함수 입니다.
이 방식은 비동기식 혹은 이벤트 구동 함수에서 사용된다.
콜백 함수는 네트워크 통신이나 파일 입출력 작업과 같이 완료하는 데 오랜 시간이 걸릴 수 있는 작업을 처리하기 위해 주로 사용된다.
태스크가 완료될 때까지 프로그램 실행을 차단하지 않아도 된다.
이 예제는 네트워크 통신에서 service 와 어플리케이션 구성요소가 binding 하기 위해서 bindService 함수를 사용하는 예시이다.
// get context
context = getApplicationContext();
// bind service
Intent intent = new Intent(context, ConnectionService.class);
context.bindService(intent, connection, BIND_AUTO_CREATE);
이 함수는 서비스로부터 연결되었는지 여부를 확인하고 통신 수단인 IBinder 를 반환받기 위한 connection() 함수를 콜백한다.
또한 바인드 서비스를 시작하기 위한 onBind() 함수 또한 실행해 이 함수로부터 IBinder 를 반환받는다.
동기식/비동기식이란
쉽게 말하면 동기식이란 어떤 요청이 왔을 때 그 요청을 끝내고 다음 요청을 실행하는 방식이고, 비동기식이란 어떤 요청이 오면 그 요청이 끝나기 전에 다음 요청을 실행하는 방식이다.
동기식 프로그래밍은 특정 작업이 완료될 때까지 프로그램 실행이 차단되고, 그래야 프로그램이 다음 작업으로 넘어갈 수 있는 프로그래밍 모델이다. 즉, 동기식 프로그래밍은 단일 스레드 프로그래밍 모델로, 프로그램이 순차적이고 결정론적인 순서로 코드를 실행한다.
한편, 비동기 프로그래밍은 프로그램 실행이 특정 작업에 의해 차단되지 않는 프로그래밍 모델이며, 프로그램은 이전 작업이 완료되기를 기다리지 않고 다음 작업으로 넘어갈 수 있다. 비동기식 프로그래밍은 일반적으로 네트워크 통신이나 파일 입출력 작업과 같이 완료하는 데 오랜 시간이 걸릴 수 있는 작업을 처리하는 데 사용된다. 비동기식 프로그래밍에서는 여러 작업을 동시에 실행할 수 있으므로 특정 시나리오에서 동기식 프로그래밍보다 효율적이다.
이벤트란
이벤트란 어떤 특정한 행동이 발생한 그 자체를 의미한다. 윈도우에서는 폴더를 실행한다거나, 메뉴를 선택하거나 하는 사건들을 의미한다.
이벤트 기반 프로그래밍은 프로그램 실행을 트리거하기 위해 이벤트 또는 신호의 사용을 강조하는 프로그래밍이다. 이벤트 구동 프로그래밍에서 프로그램 흐름은 코드의 명시적인 명령에 의해 구동되지 않고 시스템이나 응용 프로그램 내에서 발생하는 이벤트에 의해 결정된다.
이벤트 구동 프로그래밍에서 시스템 또는 응용 프로그램은 특정 유형의 이벤트에 관심을 등록하고 해당 이벤트가 발생할 때 실행할 코드를 제공한다. 관심 이벤트가 발생하면 시스템 또는 응용 프로그램이 신호 또는 알림을 생성하여 해당 코드의 실행을 트리거합니다.
이벤트 기반 프로그래밍은 일반적으로 그래픽 사용자 인터페이스에서 사용되며, 마우스 클릭과 키보드 입력과 같은 사용자 작업은 프로그램 실행을 트리거하는 이벤트이다. 데이터 패킷의 도착이나 네트워크 오류와 같은 이벤트가 프로그램 실행을 트리거하는 네트워크 프로그래밍에서도 사용된다.
콜백 방식은 비동기식 또는 이벤트 구동 프로그래밍에서 일반적으로 사용되며, 여기서 코드는 예측할 수 없는 시간에 발생하는 이벤트나 신호에 응답해야 한다. 콜백 함수를 매개 변수로 전달함으로써 호출된 함수는 이벤트가 발생할 때까지 프로그램이 실행되는 것을 차단하는 대신 이벤트가 발생할 때 호출자에게 알릴 수 있습니다.
예를 들어, 자바스크립트에서 setTimeout() 함수는 콜백 함수를 매개 변수로 사용하고 특정 지연 후 콜백 실행을 예약한다:
setTimeout(function() {
console.log("This will be printed after 1 second");
}, 1000);
이 예에서 setTimeout()의 첫 번째 매개 변수로 전달된 익명 함수는 1초 후에 호출되는 콜백 함수입니다. setTimeout() 함수가 즉시 반환되므로 타이머가 만료되기를 기다리는 동안 다른 코드가 실행될 수 있습니다.
'CS' 카테고리의 다른 글
[CS] 라이브러리, Cmake, 자바 소켓 통신 (0) | 2023.09.18 |
---|---|
[CS] machine code 와 byte code 의 차이 (0) | 2023.09.15 |
[CS] 데스크톱 가상화란 (0) | 2023.03.07 |
[네트워크] 포트(port) 란 (2) | 2023.03.07 |
[CS] 블록 암호화, 메시지 다이제스트 차이점 (0) | 2023.03.07 |