콜백(Callback). 알다가도 모르겠구나.
728x90
반응형

최근에 콜백 관련하여 좋은 글을 읽게 되었다.

그 글을 읽고 있으니 내가 얼마나 콜백을 껍데기로만 알고 있었는지 깨닫게 되었다.

게다가 해당 글은 안드로이드 개발에 맞춰서 콜백을 분석하였다. (와우~)

알다가도 모를 콜백.

그 좋은 글을 바탕으로 콜백을 다시 이해해보려고 한다.


"콜백(Callback). 알다가도 모르겠구나."


1. 피호출자가 호출자를 호출한다?


함수라도 하나 호출하려고 하면 호출자니 피호출자니 이런건 신경쓸 이유가 없었다.

당연히 호출자가 피호출자를 호출하니깐.

그런데 콜백은 그 반대로 액션을 취한다.

위키에서는 이렇게도 얘기한다.

다른 코드의 인수로서 넘겨받는 서브루틴

이로서 콜백은 다음과 같은 장점인 동시에 특징을 가진다.

  • 재사용이 가능함
  • 비동기적 처리
  • 함수를 추상화


2. 그렇다면 안드로이드의 측면에서는?

Java를 기반으로 한 시스템 / 패턴 / 프로그램에서는 인터페이스(Interface) 사용을 쉽게 볼 수 있다.
근래 개인 학습을 위해 이용한 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyView extends View implements View.OnTouchListener{
        public MyView(Context context) {
            super(context);
        }
 
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            super.onTouchEvent(event);
 
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                Toast.makeText(MainActivity.this"Touch Event received -- 1",
                        Toast.LENGTH_SHORT).show();
                return true;
            }
 
            return false;
}
cs

위와 같이 콜백 메서드를 활용할 수 있다.

이때 View.OnTouchListener는 인터페이스 역할을 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class TouchListenerClass implements View.OnTouchListener{
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
                Toast.makeText(MainActivity.this"Touch Event Received -- 2",
                        Toast.LENGTH_SHORT).show();
                return true;
            }
            return false;
        }
}
 
TouchListenerClass touchListenerClass = new TouchListenerClass();
cs


위와 같이 리스너를 상속받는 클래스를 선언하고 추상 메서드(onTouch)를 구현하는 방식도 있다.

TouchListenerClass는 피호출자.

OnTouchListener는 호출자.

호출자가 가지고 있는 핸들러(onTouch)를 등록하고 피호출자가 이를 실행할 수 있게 된다.

이를 위키에서는 아래와 같이 설명했다.

콜백수신 코드는 넘겨받은 콜백 함수를 '핸들러'로서 등록하고, 콜백수신 함수의 동작 중 어떠한 반응의 일부로서 나중에 호출할 때 사용할 수도 있다 (비동기 콜백)


콜백은 코딩하면서 일상 대화 수준만큼 자주 나오는 키워드이다.

그럼에도 불구하고 아직 제대로 이해하지 못했기에 더 늦기 전에 제대로 정리하고자 했다.

공부하다보니 지금이라도 이해해서 다행이라는 생각이 든다. (잘했어. 칭찬해.)


학습시 참고했던 자료

- https://hychome.blogspot.kr/2015/10/java-callback.html

- http://blog.saltfactory.net/java/implement-java-callback.html (추천)

https://ko.wikipedia.org/wiki/%EC%BD%9C%EB%B0%B1


728x90
반응형