본문 바로가기
카테고리 없음

콜백 패턴 적용해보기 with MVP

by 찐세 2021. 10. 2.

네트워크 통신으로 가져온 데이터를 가지고 뷰를 갱신하는 예제를 만들어 보았다.

 

 

 

콜백 패턴은 MVP 뿐만 아니라 안드로이드 개발 전반에 걸쳐서 다양하게 활용할 수 있다. 

비록 안드로이드 개발을 시작한지 얼마 되지 않았지만, 콜백 패턴을 사용했을 때 효과적이었던 상황들은 다음과 같다.

 

1. 특정 동작 이후에 수행될 내용을 동적으로 부여하고 싶을 때

다음에 수행할 내용을 콜백 형태로 인자로 준다면, 동적으로 수행할 수 있다. 재사용 측면에서도 좋겠지?

 

2. 특정 동작을 수행하기 위해서 다른 객체에 대한 참조가 필요한데, 객체를 참조하는 경우에 순환 참조가 발생하는 경우

이는 예시를 들면 더 기억하기 수월할 것 같다. 

Activity 에서 RecyclerView를 참조하고 있는 상황에서 RecyclerView 도 Activity를 참조해야하는 경우가 생긴다면?

이런 경우는 RecyclerView 를 사용할때 흔히 발생하는 경우이다. RecyclerView의 아이템들에 대한 상호작용의 결과로 Activity에 존재하는 뷰를 수정해야하는 경우는 매우 일반적이기 때문이다.

이때 RecyclerView 가 Activity를 참조하면 간단하게 문제가 해결되지만, 순환 참조가 발생하게 된다. 

이를 방지하기 위해서 콜백 리스너를 사용할 수 있다. Activity 에서 리스너를 구현해서 넘겨준 뒤 RecyclerView에서 해당 콜백을 수행하는 구조를 만들면 된다.

같은 맥락으로 MVP 패턴에서도 이를 적용할 수 있는데, Presenter와 Model의 관계에서 이를 사용할 수 있었다. 

Presenter는 일반적으로 Model을 참조하게 되고, 이때 Model이 Presenter를 참조하게 된다면 순환 참조 관계가 된다. 

이때도 콜백 패턴을 사용한다면, Model의 동작 수행 후 Presenter 의 로직을 매끈하게 처리할 수 있다.

 

3. 위 두가지 장점을 조합하면 비동기 작업 후 수행할 동작을 결정할 때에도 콜백 패턴을 사용할 수 있다.

비동기 작업은 언제 끝날지 모른다. 그렇기 때문에 콜백을 던져줘서 비동기 동작이 끝난 후 넘겨준 콜백을 수행하도록 할 수 있다.