티스토리 뷰
콜백(callback) 함수란?
비동기방식을 사용할 때와 카프카를 공부하면서 콜백(callback)
이라는 말에 대해 많이 접했지만, 아직 이해가 잘 되지 않는 개념인 콜백(callback) 함수
에 대해 정리해보려고 합니다.
콜백(callback)
- 피호출자(Callee)가 호출자(Caller)를 다시 호출하는 것
- 비동기적 처리를 하기 위한 디자인 패턴의 종류
간단하게는 위와 같은 개념을 가지고 있지만, 저는 이렇게 이해하는 것이 더 명확하게 느껴졌습니다.
콜백함수를 등록하면, 특정 이벤트가 발생되었을 때 콜백함수를 호출하여 실행한다. 즉, 콜백함수는 바로 사용할 수도 있으며, 추후에 사용할 수도 있다. 이때 콜백함수가 등록되는 곳과 이벤트가 발생할 때 호출하는 것은 서버
이다.
이때, 특정 이벤트라는 것은 어떠한 조건을 만족시키는 것을 의미합니다.
콜백 예제코드
콜백함수를 처음 접한 것이 QR코드를 polling하여 검사하는 로직을 구현할 때였기 때문에, QR코드를 확인하는 예제를 정말정말 간단하게 구현해보겠습니다.
1. Callback Interface 생성
콜백함수를 사용하기 위한 인터페이스를 생성합니다. 이는 Caller 클래스에 생성해도 무방하지만, 저는 각 클래스 파일마다 명확한 역할을 하는 것이 좋아 분리하여 구현했습니다.
// Callback.java
public interface Callback {
void qrCheck(boolean check);
}
2. 피호출자(Callee)와 호출자(Caller) 구현
명확한 이해를 돕기 위해 Callee와 Caller로 구분하여 Class명을 작성했습니다.Caller
는 인터페이스로 생성한 콜백함수를 override하는 역할을 하며,Callee
는 조건을 확인하고 콜백함수 호출하는 역할을 합니다.
// Callee.java
public class Callee{
Callback callback;
public Callee(Callback callback) {
this.callback = callback;
}
public void execute() throws InterruptedException {
for (int i = 1; i <= 5; i++){
callback.qrCheck(false);
Thread.sleep(1000);
}
callback.qrCheck(true);
}
}
- Callee는 먼저, Constructor를 사용하여 Caller에서 override하여 구현한 콜백함수를 가져옵니다.
- 1초에 한번씩 콜백함수를 호출합니다.
// Caller.java
public class Caller {
public static void main(String[] args) throws Exception {
Callback callback = new Callback() {
@Override
public void qrCheck(boolean check) {
if (check) {
System.out.println("QRCode Checked!!");
} else {
System.out.println("Waiting for Check QRCode...");
}
}
};
Callee callee = new Callee(callback);
callee.execute();
}
}
- Caller는 먼저, Callback 함수를 override하여 구현합니다.
- Callee를 생성하여 Callee는 콜백함수를 호출합니다.
간단하게 Callee와 Caller를 구분하여, 제가 이해한대로 설명해보았습니다. 특정 이벤트가 발생했을 때 호출하는 방식은 아니지만, 콜백함수에 대한 개념을 이해하는데 도움이 될 수 있을 것이라고 생각합니다.
잘못된 내용이나 개선할 사항이 있다면 댓글로 남겨주시면 감사하겠습니다:)
'프로그래밍 > Java' 카테고리의 다른 글
Gradle + Springboot + Postgresql 설치&적용 (0) | 2021.03.20 |
---|