관리 메뉴

나만을 위한 블로그

[Android] 콜백이란? 리스너란? 본문

Android

[Android] 콜백이란? 리스너란?

참깨빵위에참깨빵 2019. 11. 24. 21:09
728x90
반응형

콜백(callback)의 사전적 정의는 답신 전화, (컴퓨터나 전화 사용자의) 회신, 재통보, 회수라는 뜻이 있다.

그럼 안드로이드에서의 콜백은 뭘까?

외국 사이트에서 검색하다 아래와 같은 내용을 찾았다.

 

https://www.geeksforgeeks.org/asynchronous-synchronous-callbacks-java/

 

Asynchronous and Synchronous Callbacks in Java - GeeksforGeeks

A CallBack Function is a function that is passed into another function as an argument and is expected to execute after some kind of event.… Read More »

www.geeksforgeeks.org

콜백 메서드란 다른 함수에 인수로 전달되는 함수이며, 일종의 이벤트 후에 실행될 것으로 예상된다. 콜백 메서드의 목적은 다른 클래스에서 일부 작업이 완료된 경우 클래스 Sync/Async에 알리는 것이다. 이는 비동기 작업을 할 때 매우 유용하다. 버튼을 누르거나 인터넷에서 데이터를 가져온 후 일부 작업을 수행하거나, 컨텐츠를 표시하는 등의 일상적인 작업을 수행하려 한다고 가정한다. 콜백 기능을 통해 버튼을 누르면 알림을 받으므로 이벤트 처리에 사용된다. 이 유형의 디자인 패턴은 관찰자 디자인 패턴(Observer design pattern)에 사용된다.

 

 

국내 사이트 중 한 곳에선 이렇게 말하고 있다.

 

https://www.crocus.co.kr/1533

 

콜백(Callback) 그리고 리스너(Listener)

콜백과 리스너는 비슷해 보이면서 아래와 같은 차이점을 가지고 있다. 콜백(Callback) : 이벤트가 발생하면 특정 메소드를 호출해 알려준다. (1개) 리스너(Listener) : 이벤트가 발생하면 연결된 리스너(핸들러)들..

www.crocus.co.kr

콜백 : 이벤트가 발생하면 특정 메서드를 호출해 알려준다(1개)
리스너 : 이벤트가 발생하면 연결된 리스너(핸들러)들에게 이벤트를 전달한다(n개)

 

콜백을 리스너와 비교하고 콜백은 1개, 리스너는 n개라고 한다.

 

이 블로그는 좀 더 자세하게 설명해놨다.

http://www.dreamy.pe.kr/zbxe/CodeClip/3768942

 

[Java] 자바에서 콜백(Callback) 구현하기

http://blog.naver.com/PostView.nhn?blogId=2hyoin&logNo=220398943180 프로그래밍 언어는 사용자에게 구현을 하기 위한 여러 기능들을 제공합니다. 콜백(Callback) 함수는 WinAPI를 이용한 윈도우즈 프로그램 개발에서 많이 보셨을 수도 있겠지만, 기본적인 함수 호출의 개념의 반대라고 보시면 됩니다.  일반적인 함수 호출(Call)에서 호출 하는 함수, 호출자(Caller)와 호출을 당하는 함수, 피호

www.dreamy.pe.kr

일반적인 함수 호출(call)은 호출하는 함수, 호출자와 호출되는 함수, 피호출자로 나눠져서 호출자가 피호출자를 불러 함수의 기능을 수행한다고 한다.
반면 콜백(callback)은 호출(call)을 거꾸로(back) 하는 것이라고 한다. 피호출자가 호출자를 부르는 것이다.

즉, 일반적으로 사용자가 시스템에 임의의 서비스를 호출하는 것이 보편적이다. 처리 루틴은 시스템에 있고 사용자가 해당 루틴을 요청함에 따라 동작이 일어나는 것이다.
이 호출과는 달리 시스템 측에서 이벤트를 발생시켜 이 처리를 해달라고 요청해오는 과정에서 콜백이 사용된다. 일반적인 경우와는 반대인 상황이다.

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

 

콜백의 장점을 말로만 들으면 잘 모르겠다. 언젠가 실험할 수 있는 기회가 있다면 직접 해보고 이 말의 의미를 확인해야겠다.

 

그럼 리스너란 무엇일까? 디벨로퍼에선 이벤트 리스너라는 것에 대해 설명하고 있다.

아마 이것이 리스너인 것 같아서 정리한다.

 

https://developer.android.com/guide/topics/ui/ui-events?hl=ko

 

입력 이벤트 개요  |  Android 개발자  |  Android Developers

Android에는 사용자와 애플리케이션의 상호작용으로부터 이벤트를 가로채는 방법이 여러 가지 있습니다. 사용자 인터페이스 내의 이벤트일 경우, 해당 이벤트를 사용자가 상호작용하는 특정 View 객체로부터 캡처하는 방법을 사용합니다. 이에 필요한 수단은 View 클래스가 제공합니다. 레이아웃을 작성하는 데 사용하게 되는 여러 가지 View 클래스 내에 UI 이벤트에 유용해 보이는 공개 콜백 메서드가 여러 개 있습니다. 이러한 메서드는 해당 객체에서 각각의

developer.android.com

이벤트 리스너란 뷰 클래스 안에 있는 일종의 인터페이스로, 이 안에 하나의 콜백 메서드가 들어 있다.
이 메서드는 리스너가 등록된 뷰가 UI 안의 항목과 사용자의 상호작용으로 인해 트리거됐을 때 안드로이드 프레임워크가 호출된다.
이벤트 리스너 인터페이스 안에 포함된 콜백 메서드는 onClick(), onLongClick(), onFocusChange() 등이다.

 

콜백은 다른 함수에 인수로 들어갈 수 있는 함수인데, 리스너는 이 콜백을 갖고 있는 인터페이스라고 할 수 있겠다.

 

다른 사이트는 어떻게 설명하고 있을까?

https://okky.kr/article/369831

 

OKKY | 안드로이드 이벤트 리스너에 대해서 정리를 해보았습니다.

리스너 (listener) 는 특정 이벤트를 처리하는 interface 입니다 . 이벤트 발생 여부를 기다리다가, 발생시 특정 이벤트에 맞는 처리를 하는 객체입니다.    안드로이드에서 이벤트 리스너란 사용자와의 상호작용하는 이벤트 발생시 Android framework의 interface를 호출합니다. 이 interface를 실체화한

okky.kr

리스너 : 특정 이벤트를 처리하는 인터페이스, 이벤트 발생 여부를 기다리다가 이벤트 발생시 해당 이벤트에 맞는 처리를 수행하는 객체

이벤트 리스너 : 사용자와 상호작용하는 이벤트 발생 시 안드로이드 프레임워크의 인터페이스를 호출한다. 이 인터페이스를 실체화한 객체에서 이벤트에 맞는 처리를 하는 걸 의미한다.
예를 들어 사용자와의 상호작용 이벤트는 포커스가 변하는 경우, 포커스를 맞추면서 하드웨어 키를 누르는 경우와 터치하는 경우 등이 있다.

안드로이드 프레임워크의 인터페이스는 뷰 클래스에 모두 정의돼 있다.
인터페이스의 실체화는 각 액티비티나 프래그먼트, 다이얼로그 등 UI를 보여주게 될 때 실체화된다.

이벤트 리스너를 넣는 예 : 입력 이벤트 리스너, 드래그 앤 드롭 이벤트, GPS 상태 이벤트, 라디오 그룹의 체크상태 변화를 감지하는 이벤트 등

 

이라고 설명한다. 댓글 중에는 이벤트 = 몬스터 패턴, 이벤트 리스너 = 공략집 / 이벤트 리스너 = 행동에는 대가가 따른다 등의 내용이 있는데 뭔 소린지.

 

이 글의 결론 : 볼드 처리 해놓았다.

 

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

 

[Android 용어] 안드로이드 리스너(Listener), 콜백함수(CallBack Function)

■ 리스너 & 콜백함수 (Listener & Callback Function), 옵저버 버튼을 눌렀을때 이를 감지하고...

blog.naver.com

버튼을 눌렀을 때 이를 감지하고 이에 맞는 동작을 하게 하려면 리스너 클래스를 만들어 이 클래스가 이벤트 감지 및 알맞은 동작을 하도록 구현하면 된다.

- 리스너 : 특정 이벤트를 처리하는 인터페이스. 추상 메서드인 onTouch()를 받아서 사용하며 이벤트 핸들러라고도 한다.
인터페이스 구현을 위해 별도의 클래스를 하나 더 선언해야 한다. 핸들러는 자신을 등록하는 외부 메서드의 지역변수를 참조하는데, 이 때 외부 지역 변수에 final 지정자(스택을 통한 인수전달)을 반드시 붙여야 한다.
사용자가 어떤 액션을 취할 때마다(버튼 클릭, 키보드 키 입력 등) 메시지가 발생해서 해당 메시지의 핸들러가 미리 정의해둔 행동을 하는 것이 안드로이드의 리스너다.
대략 6가지가 있는데

1. 콜백 메서드 정의
2. 뷰가 리스너 구현
3. 액티비티가 리스너 구현
4. 액티비티가 인터페이스 구현
5. 익명 내부 클래스 사용
6. 익명 내부 클래스의 임시 객체 사용이 있다.

- 콜백 함수 : 이벤트 발생을 감지하기 위한 처리와 해당 이벤트 발생 시 실행할 각각의 처리를 나눠서 코딩하는 곳, 개발자가 해당 함수의 사용을 명령하는 게 아닌 이벤트, 메시지, 알람을 받았을 때 자동으로 실행되는 함수. 대부분 on으로 시작하는 함수들이 콜백 함수다.

 

- 리스너와 옵저버의 차이)

 

리스너 : 이벤트 발생 시 사용하는 개념

옵저버 : 변경을 감지하기 위해 사용하는 개념

 

구현은 둘 다 인터페이스로 하지만 개념 자체가 달라서 확실히 구별해야 한다.

 

지금까지 공부한 것을 종합해보면 콜백과 리스너란 용어의 뜻이 한번에 와닿진 않는다.

그래도 정리해보자면, 내 생각엔 콜백 메서드란 다른 메서드에 인수로서 전달될 수 있는 함수인 것 같다. 리스너는 이 콜백 메서드를 가진 인터페이스라 할 수 있겠다.

디벨로퍼의 생명주기 문서에도 onStart(), onStop() 등 생명주기 메서드들도 콜백이라고 하니 이것들도 콜백이라 말할 수 있을까? 왜 이것들을 콜백이라 하는지는 더 공부해봐야겠다.

 

결론 :

- 콜백 메서드는 다른 함수에 인수로 넣을 수 있는 메서드고, 보통 on으로 시작하는 것들이 콜백 함수다. 버튼 클릭 등 이벤트가 발생하면 이에 맞는 작업을 수행하기 위해 코드를 작성하는 곳이다.

 

- 리스너는 특정 이벤트를 처리하는 인터페이스로, 추상 메서드인 onTouch()를 받아서 실행하며 이벤트 핸들러라고도 한다. 사용자와 상호작용하는 이벤트 발생 시 안드로이드 프레임워크의 인터페이스를 호출한다.

반응형
Comments