취미처럼

[JAVA] 콜백 본문

JAVA/이론

[JAVA] 콜백

sirius 2021. 3. 23. 10:28

일반적으로 함수 호출을 할 때에는 함수를 호출하는 함수(Caller)와 호출당하는 함수(Callee)가 있다.

콜백(Callback)은 일반적인 함수 호출의 흐름과 다르게 동작을 한다. 호출을 당한 함수(Callee)에서 호출을 한 함수(Caller)을 호출할 수 있다.

public interface callback {
    void addCount();
    void subCount();
    boolean isLessZero();
}
class Callee {
    private int count;
    private callback callBack;
 
    public Callee() { count = 0; }
 
    public void setCallBack(callback callBack) {
        this.callBack = callBack;
    }
 
    public int getCount() {
        return count;
    }
 
    public void addCount() {
        this.count++;
    }
 
    public void subCount() {
        this.count--;
    }
 
    public boolean execute() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Input Data : ");
        int condition = scanner.nextInt();
 
        switch (condition) {
            case 1:
                this.callBack.addCount();
                break;
            case 2:
                this.callBack.subCount();
                break;
        }
 
        return callBack.isLessZero();
    }
}
public class Caller {
    public static void main(String[] args) {
        Callee callee = new Callee();
        callee.setCallBack(new callback() {
            @Override
            public void addCount() {
                callee.addCount();
                System.out.println(callee.getCount());
            }
 
            @Override
            public void subCount() {
                callee.subCount();
                System.out.println(callee.getCount());
            }
 
            @Override
            public boolean isLessZero() {
                if (callee.getCount() < 0) return true;
 
                return false;
            }
        });
 
        while(true) {
            if (callee.execute()) break;
        }
    }
}
Comments