네트워크 통신으로 가져온 데이터를 가지고 뷰를 갱신하는 예제를 만들어 보았다.
콜백 패턴은 MVP 뿐만 아니라 안드로이드 개발 전반에 걸쳐서 다양하게 활용할 수 있다.
비록 안드로이드 개발을 시작한지 얼마 되지 않았지만, 콜백 패턴을 사용했을 때 효과적이었던 상황들은 다음과 같다.
1. 특정 동작 이후에 수행될 내용을 동적으로 부여하고 싶을 때
다음에 수행할 내용을 콜백 형태로 인자로 준다면, 동적으로 수행할 수 있다. 재사용 측면에서도 좋겠지?
2. 특정 동작을 수행하기 위해서 다른 객체에 대한 참조가 필요한데, 객체를 참조하는 경우에 순환 참조가 발생하는 경우
이는 예시를 들면 더 기억하기 수월할 것 같다.
Activity 에서 RecyclerView를 참조하고 있는 상황에서 RecyclerView 도 Activity를 참조해야하는 경우가 생긴다면?
이런 경우는 RecyclerView 를 사용할때 흔히 발생하는 경우이다. RecyclerView의 아이템들에 대한 상호작용의 결과로 Activity에 존재하는 뷰를 수정해야하는 경우는 매우 일반적이기 때문이다.
이때 RecyclerView 가 Activity를 참조하면 간단하게 문제가 해결되지만, 순환 참조가 발생하게 된다.
이를 방지하기 위해서 콜백 리스너를 사용할 수 있다. Activity 에서 리스너를 구현해서 넘겨준 뒤 RecyclerView에서 해당 콜백을 수행하는 구조를 만들면 된다.
같은 맥락으로 MVP 패턴에서도 이를 적용할 수 있는데, Presenter와 Model의 관계에서 이를 사용할 수 있었다.
Presenter는 일반적으로 Model을 참조하게 되고, 이때 Model이 Presenter를 참조하게 된다면 순환 참조 관계가 된다.
이때도 콜백 패턴을 사용한다면, Model의 동작 수행 후 Presenter 의 로직을 매끈하게 처리할 수 있다.
3. 위 두가지 장점을 조합하면 비동기 작업 후 수행할 동작을 결정할 때에도 콜백 패턴을 사용할 수 있다.
비동기 작업은 언제 끝날지 모른다. 그렇기 때문에 콜백을 던져줘서 비동기 동작이 끝난 후 넘겨준 콜백을 수행하도록 할 수 있다.