01. 콜백이란 ?
Callee Side에서 Caller Side위에 작동하는 메서드를 호출하는 것.
02. 콜백 구현 및 진행 순서
01) Callee : 콜백 인터페이스 및 메서드 선언
02) Caller : 콜백 인터페이스 구현 및 Callee객체에 등록
03) Callee : 호출
위의 순서에 따라 예시를 작성해 봤는데, 이해가 잘 되길 바란다.
03. 예제 코드
* Callee.java
import java.util.Scanner;
public class Callee {
public interface CallBack {
public void onInputOne(Callee callee);
public void onInputTwo(Callee callee);
}
private Integer num;
private CallBack callback;
public Callee() {
this.num = 0;
this.callback = null;
}
public void setCallBack(CallBack callback) {
this.callback = callback;
}
public Integer getNum() {
return this.num;
}
public void execute() {
Scanner scanner = new Scanner(System.in);
System.out.println("1과 2중 하나를 입력하세요.");
this.num = scanner.nextInt();
if(this.callback != null) {
switch(this.num) {
case 1:
this.callback.onInputOne(Callee.this);
break;
case 2:
this.callback.onInputTwo(Callee.this);
break;
}
}
}
}
* CallerExample.java
public class CallerExample {
public static void main(String[] args) {
Callee callee = new Callee();
callee.setCallBack(new Callee.CallBack() {
@Override
public void onInputOne(Callee callee) {
System.out.println("Caller 왈 : 아 ! Callee에서 1을 입력받았구나 !");
System.out.println("callee's num : " + callee.getNum());
}
@Override
public void onInputTwo(Callee callee) {
System.out.println("Caller 왈 : 아 ! Callee에서 2를 입력받았구나 !");
System.out.println("callee's num : " + callee.getNum());
}
});
callee.execute();
}
}
04. 실행 결과
$ java CallerExample
1과 2중 하나를 입력하세요.
1
Caller 왈 : 아 ! Callee에서 1을 입력받았구나 !
callee's num : 1
$ java CallerExample
1과 2중 하나를 입력하세요.
2
Caller 왈 : 아 ! Callee에서 2를 입력받았구나 !
callee's num : 2
05. 결론
콜백 구현은 A클래스에서 동작할 수 없고 B클래스에서만 동작할 수 있는 메서드를 A클래스에서 인터페이스로 선언하여 B클래스에서 정의하고 A측에서 호출할 수 있도록 한다.
이는 안드로이드의 특정 컴포넌트에서는 해결할 수 없는 문제를 다른 컴포넌트에서 해결 가능하게 만들어주는 것과 같은 곳들에 응용 가능하므로 매우 중요한 개념이라 할 수 있다.