콜백 정의
프로그래밍에서 콜백(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);
}
}
'CS 잡지식' 카테고리의 다른 글
클라이언트와 서버에 대한 오해, 그리고 Proxy Pattern과 Decorator Pattern....... (0) | 2023.02.23 |
---|---|
스프링 Bean의 등록 방법 (0) | 2023.02.22 |
Strategy Pattern - Field Injection, Parameter Injection (0) | 2023.02.21 |
Sub Class vs Interface implementation Class (0) | 2023.02.20 |
템플릿 메서드 패턴의 단점을 극복하자 - Strategy Pattern (0) | 2023.02.20 |