본문 바로가기

CS 잡지식

콜백(Call Back)

콜백 정의 

프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한

를 말한다. ( 실행 가능한 코드 : int a;라는 코드는 코드이기는 하나 [실행]되는 코드라고 보기 어렵다. 

그러나, new Stratey() 코드는, 객체를 생성하는 [실행 가능한] 코드이다. 즉, 코드라고 해서 다 콜백이 아니다.)

콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. (위키백과 참고)

ex ) 

void strategyV2() {

 ContextV2 context = new ContextV2();
 
 context.execute(new Strategy() {
 
 // 콜백 && 클라이언트 사이드의 코드 : : 이 코드들을 여기(클라이언트)에서 실행되는 것이 아니라, context의 execute메서드에서 실행

 @Override
 public void call() {
 log.info("비즈니스 로직1 실행");
 }
 });
 context.execute(new Strategy() {
 
 // 콜백 && 클라이언트 사이드의 코드
 @Override
 public void call() {
 log.info("비즈니스 로직2 실행");
 }
 });
}
void strategyV3() {

 ContextV2 context = new ContextV2();
 
 context.execute(
 
 // 콜백 : 이 코드들을 여기(클라이언트)에서 실행되는 것이 아니라, context의 execute메서드에서 실행
 () -> log.info("비즈니스 로직1 실행")
 
 );
 context.execute(
 
 // 콜백 
 () -> log.info("비즈니스 로직2 실행")
 
 );
}
void strategyV1() {

 ContextV2 context = new ContextV2();
 
 context.execute(
 
 // 콜백
 new StrategyLogic1()
 
 );
 context.execute(
 
 // 콜백
 new StrategyLogic2()
 
 );
 }

쉽게 이야기해서 callback 은 코드가 호출( call )은 되는데 코드를 넘겨준 곳의 뒤( back )에서 실행된다는 뜻이다.

ContextV2 예제에서 콜백은 Strategy 이다.

여기에서는 클라이언트에서 직접 Strategy 를 실행하는 것이 아니라, 클라이언트가

ContextV2.execute(..) 를 실행할 때 Strategy 를 넘겨주고, ContextV2 뒤에서 Strategy 가

실행된다.

 

 

// 콜백(실행 가능한 코드)를 구현하기 위해서는 단 1개의 메서드(DEFAUL 메서드 등 제외)만 있어야 한다.
public interface Callback {
    void call();
}
public class TimeLogTemplate {

    public void execute(Callback callback){ // 인터페이스로 콜백을 전달 받음


        long startTime = System.currentTimeMillis();

        //비지니스 로직 실행
        callback.call(); // 콜백 실행!!!

        //비지니스 로직 종료
        long endtime = System.currentTimeMillis();
        long resultTime = endtime - startTime;
        log.info("resultTime = {} ", resultTime);

    }


}