프로젝트/Android Project) 가장 가까운 주유소 찾기 app

가장 가까운 주유소 찾기 (5차 업데이트) 내용

roder 2024. 1. 31. 21:05

https://github.com/leeugun123/find_gas_station

 

GitHub - leeugun123/find_gas_station: find_gas

find_gas. Contribute to leeugun123/find_gas_station development by creating an account on GitHub.

github.com

 

# 5차 배포 내용

 

1.  Java -> kotlin 언어 이전 

 

사실 kotlin으로 변경할때 많은 생각이 들었다.

혹시 kotlin으로 다 변경 했음에도 불구하고,

어플이 갑자기 돌아가지 않거나

뭔가 컴파일러에게 문제가 생기면 어떡하지? , 다시 롤백해야 하나??

수많은 안 좋고 부정적인 생각이 들었지만,

그럼에도 불구하고 kotlin으로 언어를 변경한 이유는

우아한 테크 코스의 선발 과정인 프리코스를 경험하면서,

Kotlin이 얼마나 뛰어난 언어인지를 깨달았기 때문이다.

 

https://yozm.wishket.com/magazine/detail/238/

 

안드로이드 앱개발, 왜 코틀린(KOTLIN)이 필요할까? | 요즘IT

코틀린이 대체 무엇인지, 여러분의 개발 프로젝트에 어떻게 적용해볼 수 있을지, 이번 시간, 위시켓이 코틀린(Kotlin)에 대한 모든 것을 낱낱이 파헤쳐 보겠습니다.

yozm.wishket.com

 

읽어보면 왜 코틀린을 사용해야 하는지 한번에 이해 할 수 있을 것이다.

 

https://roder.tistory.com/46

 

우테코 프리코스 2주차 후기 : 자동차 경주 게임 (안드로이드)

# 깃허브 주소 https://github.com/leeugun123/racing-car-kotlin-test GitHub - leeugun123/racing-car-kotlin-test Contribute to leeugun123/racing-car-kotlin-test development by creating an account on GitHub. github.com # 전체적인 우아한 프리코

roder.tistory.com

 

 프리코스를 진행하면서 코드리뷰 피드백을 받은 것들을 기록했는데

읽어보면 참 좋을 것 같다. ㅎㅎ

 

 물론 진행하는 과정 중에서 컴파일러 버전이 자꾸 에러가 나서

구글링 하느라 진짜 애좀 먹었다.

 이미 롤백 하기에는 너무 멀리 왔기 때문에 정말 피를 말리며 오류를 고쳤다.

 

 

2.  비동기 처리를 위한 Coroutine 사용

 

사실 Kotlin으로 언어 변경을 한 이유 중 가장 큰 원인이다.

어플을 실행해보면 DB 작업과 주유소 정보를 가져오는 네트워크 작업이 들어가있다.

하지만 이 모든 작업을 Main Thread (UI)에 실행하면 ANR오류가 발생하여 앱이 종료된다.

(DB와 Network 작업은 시간이 많이 소요되기 때문에

Main Thread에서 실행할 경우 UI가 잠긴다.)

따라서 DB와 네트워크 작업은 백그라운드로 전환하여 실행해야 하는데

이를 위해서는 비동기적 프로그래밍이 필요하다.

 

물론 비동기적으로 프로그래밍하는 방법은 여러가지가 있다. 

하지만 AsyncTask는 Deprecated 되었고,

RxJava는 사용법이 조금 복잡하고

코틀린으로 언어 변경 시 사용이 불가능했기 때문에

많은 안드로이드 개발자들이 사용하는 코루틴을 사용하기로 하였다.

 

그렇다면 코루틴은 무엇이 이점인 것인가??

 

사실 구글링에서 검색해보면 다 알 수 있겠지만 대표적인 이유는

 

1. 경량 쓰레드

 

-> 별도의 쓰레드를 따로 만들지 않아도 됨.

     쓰레드보다 가벼우며 Context Switching의 필요 X

     동시성 프로그래밍 지원

 

 

2. 쉬운 비동기 처리 

 

-> RxJava보다 사용하기 쉽고 레트로핏과 같이 사용 할 경우

     콜백 지옥에서 벗어 날 수 있음.

     가독성을 높여주며, 비동기적 처리를 동기적 코드처럼 작동하여

     개발자가 쉽게 코드를 작성 할 수 있게 해줌.

 

 

 하지만 코루틴을 구현하면서 제일 헷갈렸던 점이 바로 Scope였다.

 

CoroutineScope , LifecycleScope, GlobalScope, ViewModelScope등

어떤 Scope를 사용해야 하며, withContext와 Dispatcher 등 해당 Scope가 사용되는 예시를

공부하며 개발했기 때문에 코루틴을 구현하는데 어려움이 있었다.

 

하지만 용어들을 공부하고, 어떤 상황에서 Scope를 적용해야 하는지

공부했기 때문에 Activity와 Fragment의 lifecycle을 더욱 정확하게 이해했다.

 

무지성(?)으로 사용하는 것이 아닌 왜 이 Scope를 사용하는지

왜 withContext으로 Main에서 IO로 Dispatch하는지 의문점을 가지며 개발했기 때문에

코루틴을 더욱 자세히 이해 할 수 있었다.

 

3.  MVVM 아키텍처 설계 및 클린 코드 적용

 

이전에도 MVVM으로 구현했지만, MVVM 패턴의 코드가 어떤 식으로 동작하는지

잘 이해가 가질 않아 약간 가라(?) 식으로 코드를 구현했었다.

 

하지만 MVC , MVVM 패턴을 이론 뿐만 아니라

코드 예시를 보며 공부했기 때문에 

기존에 가라 코드를 싹 다 갈아엎었고,

LiveData와 ViewModel, Repository 등등 을 알맞게 구현하여

향후 유지보수를 매우 용이하게 수정하였다.

 

또한 우테코 프리코스 때 받은 코드 리뷰 피드백을 통해서

클린코드를 블로그와 유튜브를 통해 공부하고,

코틀린으로 변환과 동시에 각 메소드별로 하나의 기능만

수행 할 수 있게 코드를 리팩토링 하였다.

 

이전에는 코드를 봐도 어떻게 돌아가는지 한눈에 파악하는데 시간이 오래 걸렸지만,

리팩토링 이후, 메소드의 기능에 맞게 이름을 작성한 후 추상화 시켰기 때문에

Activity 내부가 어떻게 돌아가는지 한눈에 파악이 가능했다.