1 분 소요

RestTemplate에서 콜백 interface 개념이 보이길래 알아 보기로 했다.

CallBack

  1. 피호출자(Callee)가 호출자(Caller)를 다시 호출하는 것
  2. 비동기적 처리를 하기 위한 디자인 패턴의 종류

자바는 콜백 인터페이스를 사용한다.

  • CallBack interface Caller 내부에 생성하거나, 분리하여 구현할 수 있다.
    public interface RequestCallback {
        void doWithRequest(ClientHttpRequest request) throws IOException;
    }


  • Caller 클래스 실행되는 메소드 내에서 인스턴스를 생성하면서 CallBack interface를 overriding하거나,
    CallBack interface를 구현하는 내부 클래스를 생성한다.
    public class Caller {

        public void 실행되고있는함수이름() {
            // CallBack 구현하기
            CallBack callBack = new CallBack() {
                @Override
                public void doWithRequest(ClientHttpRequest request) throws IOException {
                    // 구현 내용...
                }
            }

            // Callee를 호출하면서 CallBack 전달
            Callee callee = new Callee(callBack);
            // Callee 함수 호출
            callee.example();
        }
    }


  • Callee 클래스 콜백 인터페이스를 선언. (Caller가 Callee를 호출시 Caller로 부터 CallBack을 받아야 된다.)
    public class Callee {
        CallBack callBack;

        public Callee(CallBack callBack) {
            this.callBack = callBack;
        }
 
        public void example() {
            // 수행문 진행 .....

            // 특정 Event 발생시 callBack함수 실행
            if (Event 발생) {
                callBack.doWithRequest();
            }
        }
    }



예를 들어
A클래스가 실행되고 특정 조건이 발생하여 B클래스가 실행될때
B클래스가 실행되는 동안 진행상황을 알려주고 싶은 경우 동기 방식으로는 매번 A클래스가 B클래스의 상태를 지속적으로 확인해야 되지만
비동기 방식으로는 A클래스는 상관없이 B클래스가 A의 callBack함수를 실행시켜 자신의 진행상황을 알리게 하면 된다!
이렇게 하면 연산 횟수도 줄어들고 코드도 줄어든다.


따라서


Caller(호출자) : Callee에 있는 method를 호출하는 객체
Callee(피호출자) : Caller에게 호출받은 method를 실행한다. Caller가 실행될때 Caller(A)가 Callee(B)의 method를 호출하고 Callee(B)는 호출받은 method를 실행도중 Event(특정 진행상황 도달)가 발생하면 Callback객체를 통해 Caller(A)를 호출할 수 있게 된다.


예시출처

태그:

카테고리:

업데이트: