728x90

 

1. 기존 legacy 프로젝트를 많이 유지보수 하는 관계로, 네트워크 클래스가 async task로 구현된걸 발견..

사실 절망에 빠져있는 상황인데...

 

Async Task를 대체할 방안은 찾아보니 대체로 두가지였다.

1) RxJava, RxKotlin 등 비동기처리를 Rx기반으로 변경

2) Kotlin의 Coroutine 이용

 

2. 그러나 현재 legacy 프로젝트는 전부 Java이고, 신규메뉴만 Kotlin도 아니고 핵심 네트워크 클래스를 Kotlin으로 변경하면 연결된 Java코드들에서도 무난하게 다 돌아가는지... 순전히 경험미숙으로 걱정 중

 

- 기존 레거시 프로젝트: Java기반, HttpUrlConnection+Async Task를 사용

- 토이 프로젝트: Kotlin 기반, Retrofit 사용 

 

찾아보니 Retrofit은 AsyncTask를 사용하지 않는 관계로, 굳이 해당 부분을 전부 수정할 필요는 없는 듯 하다.

 

"Retrofit의 장점은 속도, 편의성, 가독성이 있다. 가장 비교하기 좋은 Okhttp는 사용시 대개 Asynctask를 통해 비동기로 실행하게 되는데 Asynctask가 성능상 느리다는 이슈가 있었다. Retrofit에서는 Asynctask를 사용하지 않고 자체적인 비동기 실행과 스레드 관리를 통해 속도를 훨씬 빠르게 끌어올렸다. 약 3~10배 차이가 난다고 한다."

 

"앱-서버 통신을 Okhttp 라이브러리로 AsyncTask를 사용하여 구현했다고 할 수도 있다. 하지만 AsyncTask 로 서버와 통신을 구현하는 것은 어렵고 시간이 많이 들 뿐만 아니라(비동기 처리 코드를 개발자가 하나하나 작성), AsyncTask 자체가 안드로이드에서 deprecated 되었다. 그래서 이제 AsyncTask 를 사용하여 서버 통신을 구현하는 것은 좋은 생각이 아니다. 

그대신, retrofit 을 사용하는 것이 가독성도 좋고 훨씬 간편하고 쉽고, 빠르기 때문에 retrofit 을 사용한다."

 

==> 그렇다면 레거시 프로젝트는 네트워크 클래스 부분을 Retrofit으로 변경하고, 그 외에 AsyncTask를 사용하는 부분은 RxJava로 수정하면 급한 불은 끌 수 있지 않을까 싶다.

 

 

Reference

woovictory.github.io/2019/01/03/Android-What-is-retrofit/

salix97.tistory.com/204

 

 

 

728x90

+ Recent posts