JAVA 콜백 메서드 구현하기

카테고리 없음

2019. 1. 23. 13:05

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측에서 호출할 수 있도록 한다.

이는 안드로이드의 특정 컴포넌트에서는 해결할 수 없는 문제를 다른 컴포넌트에서 해결 가능하게 만들어주는 것과 같은 곳들에 응용 가능하므로 매우 중요한 개념이라 할 수 있다.