조회 수 26010 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

http://blog.naver.com/PostView.nhn?blogId=2hyoin&logNo=220398943180




프로그래밍 언어는 사용자에게 구현을 하기 위한 여러 기능들을 제공합니다. 콜백(Callback) 함수는 WinAPI를 이용한 윈도우즈 프로그램 개발에서 많이 보셨을 수도 있겠지만, 기본적인 함수 호출의 개념의 반대라고 보시면 됩니다.


 일반적인 함수 호출(Call)에서 호출 하는 함수, 호출자(Caller)와 호출을 당하는 함수, 피호출자(Callee)로 나눠져 호출자(Caller)가 피호출자(Callee)를 불러 함수의 기능을 수행하게 되죠.
Callee에게 기능을 호출하는 Caller

 하지만 콜백(Callback)은 이름에서 예상할 수 있듯이 호출(Call)을 거꾸로(Back)하는 것입니다. 피호출자(Callee)가 호출자(Caller)를 부르게 되죠.

 일반적으로 사용자가 시스템에 임의의 서비스를 호출하는 것이 보편적입니다. 즉, 처리루틴은 시스템에 존재하고 사용자가 해당 루틴을 요청함에 따라 동작이 일어나는 것이죠.

 이런 정상적인 호출과 달리 시스템 측에서 이벤트를 발생시켜 이에 대한 처리를 해달라고 요청해오는 과정에서 콜백이 사용됩니다. 일반적인 경우와 반대가 되는 상황이죠.
Caller에게 기능을 수행하라고 알려주는 Callee

 콜백의 장점은 어떤 특정 조건이 만족이 되었을 때 지정한 기능을 수행하는 경우, 조건을 확인하기 위해 게속해서 조건을 만족하는지 확인하는 과정 없이 조건이 만족되었을 때 기능을 호출하기 때문에 효율적으로 기능을 수행할 수 있습니다. 비동기로 조건에 대한 작업을 수행할 수 있게 되기 때문입니다.

자바에서의 콜백

 위에서 설명항 것과 같이 특정 조건이 만족이 되었을 때 기능을 호출하게 됩니다. 때문에 비동기로 기능을 호출하여 사용할 수 있다고 설명을 했는데, 지금 구현하려는 자바에서의 콜백은 그 느낌이 약간 다름니다.

 위의 그림은 일반적인 개념의 콜백이 수행되는 과정과 구현하려는 자바 콜백을 비교하는 그림입니다.

 자바에서의 콜백은 내부에서 수행되는 작업에 대해 특정 조건이 만족하면 외부의 기능을 호출하는 과정을 나타내고 있습니다.

<콜백 구현>
class Callee {
    
    interface Callback { // 인터페이스는 외부에 구현해도 상관 없습니다.
        void callbackMethod();
    }
    
    private boolean m_condition;
    private Callback m_callback;
    
    public Callee() {
        m_condition = false;
        m_callback = null;
    }
    
    public setCallback(Callback callback) {
        this.m_callback = callback;
    }
    
    // 콜백 메서드를 호출할 수 있는지 확인
    private checkCondition() {
        if(m_condition && (m_callback != null))
            m_callback.callbackMethod(); // 가능하면 콜백 메서드 호출
    }
    
    ...
}

class Caller {
    
    private Callee callee;
    private int value;
    
    public Caller() {
        Callee.Callback callback = new Callee.Callback() {
            @Override
            public void callbackMethod() {
                // 이곳에 콜백 메서드에서 할일을 구현 (값 전달, 복사...)
            }
        callee.setCallback(callback);
        ...
    }
    
    ...
}

 위와 같이 구현하여 Callee에서 checkCondition() 메서드를 통해, 현재의 작업이나 상태 등을 체크하고 Caller에게 값을 전달하거나 기능을 수행할 수 있습니다.

 일반적인 구현에서, 값을 넘겨주는 쪽이 아닌 보통 넘겨 받는 쪽이 받아올 수 있는 상황인지 물어보고 받아오는 것과 달리, 콜백에선 넘겨주는 쪽이 스스로 넘겨줄 수 있는지 확인 후 넘겨줄 수 있을 때 값을 전달해 주는 것이죠. 

Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
506 LINUX awk 명령어 사용법 1 2006.02.16 114791 15
505 MFC CString 에서 형변환 함수들 총정리 2010.11.29 102811 0
504 Android adb am 명령어 ; app 실행 및 Intent 전송 2013.08.12 100499 0
503 Android [GIT 사용법] Git Tutorial 2011.12.26 96601 0
502 일반 ┗ bat(배치)파일 문법 2007.08.06 93710 8
501 LINUX [Shell Script] 리눅스 쉘(Shell) 스크립트 2014.09.23 86898 0
500 JAVA JAVA String 클래스 메소드 정리 1 2015.02.05 85064 0
499 LINUX [Shell Script] 쉘 스크립트에서의 사칙연산과 문자열 자르기 2014.11.01 81838 0
498 C# StringBuilder로 문자열 처리를 빠르게 2012.12.04 78024 0
497 LINUX du 명령어 사용법(디스크 용량 확인) 1 2012.05.31 77543 0
496 Python BeautifulSoup으로 웹에 있는 데이터 긁어오기 2013.04.08 77032 0
495 Android [GIT 사용법] 초보자가 알아두면 좋을 명령어 정리 1 2011.12.26 66628 0
494 LINUX errno.h - system error numbers 2013.01.09 65978 0
493 일반 findstr 사용법 - window용 find, grep 명령 2014.02.04 63227 0
492 MFC API를 이용하는 유니코드와 ANSI 문자열간의 변환 방법 2006.04.14 63223 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5