[안드로이드] CallBack 과 Listener

2023. 3. 11. 23:48· Android
반응형

도대체 CallBack이 무엇인가?.... 

정말 많이 들어본 단어인데 도무지 그냥 찾아봐서는 콜백이 뭔지 딱! 머리에 박히질 않는다. 

안드 강의에서 snackbar를 사용하면서 action에 대한 콜백을 사용해봤는데 클릭리스너랑 너무 비슷해서 이 둘의 차이도 알아보려고 한다. 🌸🌸 봄 맞이 책상 정리도 깔끔하게 했으니까 레츠고~!! 🌸🌸

 

CallBack

*답신, 회신, 재통보

1. 다른 함수의 인자로써 이용되는 함수 -> 다른 함수가 먼저 실행되고 이 함수가 자신의 인자로 사용하기 위해 콜백 함수를 수행

2. 어떤 이벤트에 의해 호출되어지는 함수 -> 이벤트가 발생하면 그 '이벤트 발생을 감지' 하고 또 무언가를 수행 (난 이걸 그냥 이벤트의 이벤트 정도로 생각)


어떤 함수가 실행되고 순차적으로 다음 작업을 실행해야 할 때 사용된다.

위 1, 2번을 예시로 들어보면

  • 1번 -> 함수1이 실행되고 그 함수의 내용을 수행하기 위해 인자로 함수2를 실행해 return 값을 사용한다면 함수2가 콜백함수(함수1실행 후 함수 2 실행)
  • 2번 -> 이벤트가 발생하고 그 발생을 감지해 콜백함수 수행 (이벤트 발생 후 추가 수행을 위해 콜백함수 실행)

 

SnackBar 포스팅 처럼 버튼뷰 클릭를 통해 스낵바가 나타나는 클릭 이벤트가 발생하면

=> "스낵바가 나타났다", "스낵바가 사라졌다" 라는 메세지를 띄우는 함수가 호출되는 경우를 생각해볼 수 있다.

* 순차적으로 수행되는 콜백함수는 비동기 처리에 중요하다고.... (비동기는 나중에 따로 포스팅해서 이해해보도록 하자)

 


그런데 위와 같은 설명을 듣다 보면 클릭 리스너를 사용할 때가 생각난다. 

💡 버튼을 클릭해서 이벤트가 발생하면 메세지리를 띄우는게 바로 클릭이벤트리스너 아닌가?  그렇다면 리스너가 콜백함수일까? 

결론적으로 말하면 우리가 맨날 버튼에 다는 그 클릭 이벤트 리스너의

리스너는 인터페이스이고, 리스너를 구현할 때, 꼭 함께 구현하는 onClick() 메소드 같은 메소드가 콜백함수 이다.

(*콜백함수는 주로 on 으로 시작)

onClickListner 를 구현할 때, 반드시 onClick() 메서드를 오버라이딩 해야 한다고 안내 되는데

이는 이 콜백함수가 리스너 인터페이스의 추상함수이기 때문이다. 

 

이제 리스너와 콜백함수, 그리고 콜백함수의 역할을 어느정도 이해가 된다.

 

리스너는 말 그대로 listen, 사용자가 어떤 행위를 하는지 잘 듣고, 지켜보고, 감지하는 역할을 한다. 

*이는 디자인 패턴의 observer pattern 을 구현한 것이다.

그리고 이 리스너가 감지한 이벤트에 맞게 콜백함수를 호출해서 필요한(사용자가 정의한) 수행을 하도록 요청한다. 

그래서 리스너와 콜백함수는 짝꿍이고 종종 함께 다니면서 나를 헷갈리게 했던 것이다. 


💡 그렇다면 왜 onClick() 메소드가 콜백함수일까?

내가 버튼을 클릭해서 코드가 실행되는 것인데 콜백함수는 이벤트 발생 그 이후에 뒤이어 발생하는 함수 아닌가?

 

클릭이벤트리스너를 예시로 들어보자면.

사용자가 버튼을 클릭(사용자가 리스너에게 이벤트 감지하도록 요청) -> 리스너가 클릭 이라는 이벤트를 감지 -> 클릭했으니까 onClick 콜백 함수에 클릭 이벤트 전달(리스너가 콜백함수 실행 요청, 사용자가 한게 아니라 리스너가 시스템 상에서 요청한 것) -> 콜백함수는 이벤트가 관찰 됐으니 코드를 수행

binding.button.setOnClickListener {
	/* setOnClickListener는 오버라이딩해야 하는 추상함수(콜백함수)가 1개 이기 때문에 
    이렇게 람다 함수로 작성이 가능 */
    
	binding.textView.text = "난 당신이 요청한게 아닙니다. 난 사실 리스너가 요청한 콜백함수 입돵"
    
}

사실 우리는 "내가 버튼을 클릭했기 때문에 텍스트뷰의 텍스트를 저렇게 바꾼거야." 라고 생각할 수 있다.

물론 간접적으로 요청한 것은 맞지만 직접 저 수행을 다이렉트로 요청한 것은 아니다.

사용자는 버튼을 그냥 누른거고, 리스너는 대기를 타다가 클릭이 들어왔음을 감지하고 "야 우리 사용자가 버튼을 눌렀다. 이거 클릭 이라는 이벤트니까 클릭에 대한 처리 해줘. " 라고 시스템에서 콜백함수를 호출한 것이다.

 

우리가 주로 쓰는 클릭이벤트리스너는 구현할 콜백 함수가 onClick 하나이기 때문에 인터페이스인 리스너와 콜백 함수를 잘 구분하지 못한다. 하지만 예를 들어 (내가 지어낸거임. 실제로 있는지는 모름) 스크롤 리스너가 있다고 치면, 스크롤을 up 하는 행위와 down 하는 행위 두가지 이벤트가 있을 수 있고, 각각의 이벤트에 따라 다른 콜백 함수가 존재할 수 있다. (예를 들면 onScrollUp, onScrollDown) 

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

그래서 이렇게 인용글처럼 리스너는 여러개의(n개) 이벤트를 관찰하고, 감지된 이벤트 1개를 콜백에게 넘겨준다. 

 

 

[참고]

 

https://onlyfor-me-blog.tistory.com/47

 

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

콜백(callback)의 사전적 정의는 답신 전화, (컴퓨터나 전화 사용자의) 회신, 재통보, 회수라는 뜻이 있다. 그럼 안드로이드에서의 콜백은 뭘까? 외국 사이트에서 검색하다 아래와 같은 내용을 찾았

onlyfor-me-blog.tistory.com

https://velog.io/@dev_2dong/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Callback-%EA%B5%AC%ED%98%84%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4

 

안드로이드 Listener Interface 구현 과정에 대한 이해

도입 안녕하세요. 이동현입니다. 이번에 다루어 볼 내용은 Callback과 Listener입니다. 안드로이드에서는 앱 내의 뷰(Button, EditText등)들과 사용자가 상호작용을 하기 위해 Callback 함수를 정말 많이 사

velog.io

 

반응형

'Android' 카테고리의 다른 글

[안드로이드/Activity] 객체 전달하기  (0) 2023.03.18
[안드로이드/Activity] 데이터 전달  (0) 2023.03.18
[안드로이드/Activity] OnActivityResult 와 registerForActivityResult  (0) 2023.03.10
[안드로이드/Activity] Intent 와 Activity 실행  (0) 2023.03.10
[안드로이드/Activity] Activity란 무엇인가?  (0) 2023.03.08
'Android' 카테고리의 다른 글
  • [안드로이드/Activity] 객체 전달하기
  • [안드로이드/Activity] 데이터 전달
  • [안드로이드/Activity] OnActivityResult 와 registerForActivityResult
  • [안드로이드/Activity] Intent 와 Activity 실행
gangmini
gangmini
gangmini
게으른J 의 테크로그
gangmini
전체
오늘
어제
글쓰기방명록관리자
  • 분류 전체보기 (127)
    • 인공지능(AI) & 데이터 분석 (5)
    • Android (91)
      • Coroutine (3)
      • Compose (0)
      • 안드로이드 CS (0)
    • Kotlin (3)
    • Data Structure (0)
    • 알고리즘 (20)
      • 알고리즘 이론 (11)
      • 백준(BOJ) 문제 풀이 (9)
    • Build Tool (2)
    • Git (2)
    • 일본어 (0)
    • 기타(취준, 활동) (0)


인기 글



최근 댓글



최근 글

hELLO · Designed By 정상우.v4.2.2
gangmini
[안드로이드] CallBack 과 Listener
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.