Callback Method

콜백 메소드라고 하는 이 용어는 친숙한데 누구에게 설명하는 것이 어색해서 따로 공부를 해야할 것 같았다.


일반적인 개발에는 개발자가 시스템에 필요한 시점에 어떤 특정 기능을 호출하는 방식으로 많이 사용된다. 예를들어 API를 제공받아 해당 API 를 시점에 맞게 호출하는 것이다.


하지만 위와 같은 API 호출을 개발자가 호출하는 것이 아님 시스템이 호출해야하는 상황이 발생한다. 사용자가 호출 시점을 결정하는 것이 아닌 시스템 입장에서 필요한 타이밍에 호출하는 것이다. 


특정 이벤트가 발생하기 전에는 프로그램 입장에서 이벤트의 정보를 사용자에게 알려줄 수 없다. 개발자 또한 개발시에 사용자에게 알려줄 이벤트가 언제 발생할 지도 모른다. 이러한 경우 이벤트 발생 시 데이터를 전달하게 끔 Callback Method를 이용하여 구현해놓는 것이다.


콜백 메소드는 다른 함수의 매개변수로 호출될 함수를 전달하고, 특정 이벤트가 발생하고 나서 매개변수로 호출된 함수가 다시 호출되는 것을 의미한다.


프로그래밍에서 콜백은 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.


예시로 자바에서의 코드를 살펴보자. 예시는 본인이 직접 타이핑하였다.


(1) 인터페이스 CallbackPrint 생성

- 메소드를 선언

1
2
3
public interface CallbackPrint {
    public void print(String s);
}
cs


(2) 해당 인터페이스의 메소드를 구현할 인터페이스 구현체 생성 및 메소드 오버라이딩

1
2
3
4
5
6
7
8
9
public static void process(String line){
    CallbackPrint callbackPrint = new CallbackPrint(){
        @Override
        public void print(String s) {
            System.out.println(s);
        }
    };
    run(line, callbackPrint);
}
cs


(3) 전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class CallbackTest {
    public static void main(String[]args){
        String s = "Hi Hello Everyone, My Name is DoubleR";
        process(s);
    }
    
    public static void process(String line){
        CallbackPrint callbackPrint = new CallbackPrint(){
            @Override
            public void print(String s) {
                System.out.println(s);
            }
        };
        run(line, callbackPrint);
    }
    
    public static void run(String line, CallbackPrint callbackPrint){
        String[]s = line.split(" ");
        
        for(int i = 0; i < s.length; i++){
            callbackPrint.print(s[i]);
        }
    }
}
cs


실행순서는 main메소드를 시작으로 run이 실행되고 이후에 매개변수로 받은 인자의 print()메소드가 실행되는 것이다. 


(4) 콘솔내용

1
2
3
4
5
6
7
Hi
Hello
Everyone,
My
Name
is
DoubleR
cs



Posted by doubler
,