일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @GeneratedValue
- @GenericGenerator
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
- Collections
- Combination
- combinations
- Comparator
- Today
- Total
기록
AndroidStudio/kotlin/callback 패턴의 적용 본문
개요
다른 블로그의 포스팅 중 콜백과 관련된 포스팅은 자바스크립트를 이용한 예제와 프로미스를 활용하는 개선 방법 등을 담고 있는 포스팅이 많다. 안드로이드에서는 어떻게 콜백을 이용할 수 있을까 궁금해져서, 프로젝트에 적용해보고 글로 정리해 두려고 한다.
프로젝트가 어느 정도 틀이 잡히면 기능별 모듈화를 시도한다. 프로젝트 중 데이터를 송수신하는 코드들을 모아 network 모듈로 구성하려는 시도가 있었다. 클래스간 서로 참조하지 않도록 결합도를 낮추어야 했고, 여기에 callback을 이용했다.
해당 프로젝트의 정보 : db(firebase), front(android)
순서
1) RequestListener.kt 만들기
2) GetRequest.kt 만들기
3) Activity에서 호출
예제
1) RequestListener.kt 만들기
listener는 interface로도 만들 수 있지만, 위 예제에서는 onRequestSuccess(data: Object) 만 호출을 강제하고 싶어서 추상클래스로 선언했다.
2) GetRequest.kt 만들기
사용자의 정보를 가져오는 request를 클래스로 만들었다. 리스너를 설정하는 함수를 외부에서 접근할 수 있도록 만든다.
3) Activity에서 호출
데이터를 사용할 화면에서, 리스너를 설정해주면 데이터를 송/수신 한 뒤에 설정해 준 동작이 실행된다.
4) 결과
데이터가 요청한 뒤에 Log가 찍히는 것을 확인 할 수 있다.
결론
callback
예제를 보고 정의를 다시 읽어보면, 다른 코드의 인수로서 넘겨주는 실행가능한 코드(인터페이스 or 추상 클래스)의 의미가 더 와닿는다. 이런 구조는 리사이클러뷰의 클릭 이벤트 전달, frgament에서 activity의 함수를 사용할 때 등에서 많이 사용된다.
중첩 callback
특히, callback 안에 callback을 중첩해서 사용하는 경우, callback지옥이라 불릴 만큼 복잡하고 어려운 구조가 만들어 질 수 있으므로 주의해야 한다. 억지로 콜백을 중첩해 보자면, 아래와 같이도 사용할 수는 있다. jetpack에서 제공하는 liveData 를 활용하면 데이터의 변화를 감지할 수 있고, thread, 코루틴 둘다 join() 함수를 통해 실행 순서를 제어할 수 있다(2022/06 기준) 는 것을 생각하면, 비동기 처리 방법에는 callback 이외에도 아양한 방법이 있다는 생각이 들었다.
'Moblie > Android' 카테고리의 다른 글
AndroidStudio/XML의 글꼴 적용하기 (0) | 2022.07.12 |
---|---|
AndroidStudio/kotlin/Custom Exception (0) | 2022.07.10 |
androidStudio/ProgressBar Style Custom (0) | 2022.06.19 |
AndroidStudio/나인 패치(9-Path) 이미지 (0) | 2022.06.17 |
androidStudio/kotlin/RecyclerView Swipe, Drag (0) | 2022.06.06 |