The Boxer
Interface를 사용한 Callback 구현 본문
Interface를 사용한 Callback 구현
1. Callback의 개념
Callback이란 한 클래스가 다른 클래스에 실행을 요청하여 실행이 진행되는 도중, Event가 발생하면 요청한 Class에서 정의한 함수를 실행하도록 하는 개념입니다. Callback을 사용하는 이유는 실행을 요청한 Class에 Sync/Async 방식으로 수행이 끝났는지 알려주거나 요청한 Class에서 정의한 함수를 실행시키기 위함입니다.
주로 비동기 방식에서 사용될 수 있는데, 예를들어 버튼을 클릭하면 사진을 띄우는 논리가 있다고 하면, 버튼을 클릭하는 행위가 Event이고, Event가 발생하면 Callback을 통해 사진이 띄워지는 것을 생각해 볼 수 있습니다.
2. Interface를 통한 구현
구현에 앞서 Caller(호출자)와 Callee(피호출자), Callback 객체를 소개하고 가겠습니다.
Caller는 Callee에 있는 method를 호출하는 객체입니다. Caller는 Callee에 있는 doSome이라는 method를 호출합니다.
Callee는 Caller에게 호출받은 method를 실행합니다. 실행하는 도중 Callback객체를 사용하여 Caller를 호출합니다.
Callback 객체는 Caller가 실행한 Callback method를 선언하는 Interface입니다. Callback method의 구현은 Caller 안에서 이루어지게 됩니다.
코드 예시
/**
* Caller.java
*/
public class Caller {
public void doCall() {
Callee callee = new Callee(callBackObject); //Callee에 Callback객체를 전달
callee.doSome(); //Callee에 있는 doSome()을 실행
}
private CallBack callBackObject = new CallBack() {
@Override
public void callBackMethod(Object obj) {
String result = (String) obj;
System.out.println(result);
}
};
public static void main(String[] args) {
Caller caller = new Caller();
caller.doCall();
}
}
/**
* Callee.java
*/
public class Callee {
private CallBack callBackObject;
public Callee(CallBack callBackObject) {
this.callBackObject = callBackObject; //Caller로 부터 받은 객체를 저장
}
public void doSome() {
System.out.println("Callee does something");
String result = "Callee callback Caller";
callBackObject.callBackMethod(result); //Callback객체의 method를 실행
}
}
/**
* CallBack.java
*/
public interface CallBack {
void callBackMethod(Object obj);
}
위 파일들을 생성한 다음 Caller를 실행시키면
Callee does something
Callee callback Caller
의 결과를 볼 수 있습니다.
코드가 실행되는 과정을 살펴보면 Caller는 Callee를 호출하며 Callback객체를 전달합니다. 이후 Callee가 doSome을 실행하고, Caller로 부터 받은 Callback객체에 있는 callBackMethod를 실행시킵니다. Callee가 호출하는 Callback 객체는 Caller로 부터 전달되어 왔고, 결국 Caller안에 있는 callBackMethod가 실행됩니다.
3. 결론
간단하게 이해하면 Interface를 통해 Callee가 Caller를 호출했다고 이해할 수 있습니다. Callback은 결국 Callee가 Caller를 호출하는 행위입니다. Caller는 Callee가 자신을 호출할 수 있도록 Callback이라는 Interface를 전달합니다. 이로써, Calle는 Caller가 요청한 임무를 수행하던 도중 Event가 발생하면 Callback을 통해 Caller를 호출할 수 있게 됩니다.
4. 참고
https://www.geeksforgeeks.org/asynchronous-synchronous-callbacks-java/
http://yongdaekim.blogspot.com/2014/06/android-selectiondialog.html
https://brunch.co.kr/@kimkm4726/1
'Java' 카테고리의 다른 글
자바 용어정리Spring - Beans와 POJO (0) | 2018.11.23 |
---|---|
Synchronized (0) | 2018.10.19 |
Lombok (0) | 2018.10.02 |
Calllback과 Synchronous/Asynchronous (0) | 2018.09.27 |
log4j를 사용한 logging (1) | 2018.07.17 |