안드로이드 44

[Android] Circuit + Compose로 Pokedex를 구현해보자. (feat. MVI)

Jetpack Compose의 버전이 올라가면서 필수 기술스택이 되어가고 있습니다.그러면서 Compose를 활용하기 좋은 아키텍처에 대한 관심도도 자연스럽게 증가하고 있으며,그러한 아키텍처로 MVI가 자리잡고 있는 듯 합니다.저 또한 프로젝트에서 Compose를 최대한 활용하려 하며,Compose를 사용하지 않더라도 Compose와의 마이그레이션을 고려하여 MVI를 주요 아키텍처로 사용하고 있습니다.이러한 덕분에 MVI 아키텍처를 위한 다양한 라이브러리들에 대한 관심도 매우 높아지고 있는데,주로 언급되는 라이브러리는 orbit-mvi, mavericks 정도가 있고, 최근 주목받기 시작한 circuit이 있습니다.Circuit?Circuit은 Slack에서 만든 프레임워크로, 실제 슬랙의 프로덕션에서 사..

개발/Android 2024.12.01

F-Lab 안드로이드 멘토링 활동 회고

지난 몇 개월 간, F-Lab에서 안드로이드 멘토로 활동했습니다.한 명의 신입 개발자 안드로이드 멘티분과 함께 했고, 짧지 않은 기간동안 함께했으며 8월부로 종료가 되었습니다.첫 멘토링이기도 하고, 나름대로 좋은 경험들과 생각들이 있어서 정리해볼 겸 회고를 합니다.왜 멘토링을 했을까요?사실 저는 기술을 공유하는 것에 욕심이 좀 있습니다. 욕심에 비해 의지와 실행력이 부족한게 문제죠.(기술 블로그나 깃허브를 꾸준히 하고싶지만... 할많하않 ㅠㅡㅠ)무튼, 나름 연차도 좀 찼겠다, 커피챗이나 네이버 엑스퍼트, 인스타그램 등을 통해 개발자가 되고 싶거나, 신입 개발자인 분들을 대상으로 커리어와 관련된 질문들, 이력서/포트폴리오 피드백, 현업에 대한 질문 등을 주고받는 활동을 해 왔는데요.개인적으로는 굉장히 의미..

개발/Common 2024.08.03

[Android/안드로이드] Jetpack Compose - Stability와 Recomposition 그리고 최적화

Jetpack Compose가 정식으로 출시된 이후, 많은 개발자들이 관심을 갖고 사용하고 있습니다.또한 Jetpack Compose 역시도 많은 업데이트가 있었고, 앞으로도 그럴 것이라 예상이 됩니다.다양한 사용 사례가 나타나면서 선언형 UI 프로그래밍 방식은 익숙해지거나, 익숙해지기 쉬운 환경들이 만들어졌다고 생각합니다.우리는 이제 "효율적으로" Compose를 사용하는 방법을 알아가고 익힐 필요가 있습니다.Jetpack Compose를 어떻게 효율적으로 사용할 수 있을까요?UI의 입장에서 "효율적이다" 를 생각해보면 의외로 답은 간단할 수 있습니다.우리가 XML 방식으로 UI를 구현할 때, 어떻게 효율적인 코드를 작성하는지 생각해봅시다.여러가지가 떠오를 수 있는데, 저는 "불필요한 UI 업데이트가 ..

개발/Android 2024.06.27

[Android/안드로이드] Jetpack Compose - 폰트 크기 고정하기

모바일 앱은 접근성 강화를 위해 시스템의 폰트 설정에 따라 동적으로 폰트 크기가 변화하도록 권장하고 있습니다.그러나 앱을 개발하다보면, UI 처리의 용이성을 위해 폰트 크기를 고정으로 하고싶은 욕구가 뿜뿜하곤 합니다.기존의 안드로이드 앱에서는 DP 사이즈를 사용해서 이를 해소하곤 했습니다만, Compose에서는 DP 사이즈의 사용이 불가합니다.대신에 TextUnit 이라는 것을 사용하게 되며, 일반적으로 SP를 사용하게 됩니다.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit TextUnit  |  Android Developersandroidx.compose.desktop.ui.tooling.previewde..

개발/Android 2024.06.17

Android - EncryptedSharedPreferences 로 데이터 암호화하기

Android 앱을 개발하다보면, 로컬에 저장해야 할 데이터가 있습니다. 사용자가 언제 앱에 접속했는지 라던가, 어떤 옵션을 ON/OFF 했는지에 대한 캐시성 정보들이 예가 될 수 있습니다. 이렇게 민감하지 않은 데이터는 평문을 그대로 저장해도 무방합니다. 하지만 만약 사용자의 개인정보와 관련이 있다거나 서버에 접근할 수 있는 토큰같은 종류라면 문제가 될 수 있습니다. SharedPreferences의 문제점 이 문제를 이해하려면 SharedPreferences와 안드로이드 어플리케이션에 대한 이해가 필요합니다. SharedPreferences는 XML 형태의 파일로 앱의 저장공간에 저장됩니다. 우리는 SharedPreferences를 선언할 때 아래와 같이 선언합니다. val sharedPref = c..

개발/Android 2023.11.14

Kotlin Multiplatform의 안정화와 Jetpack Compose

현재 안드로이드 개발자에게 큰 관심거리는 무엇이 있을까요? 굉장히 많은 것들이 있겠지만, 개인적으로 Jetpack Compose가 가장 큰 관심거리가 아닐까 합니다. 여기에 더해서 Flutter, Kotlin Multiplatform의 동향도 큰 관심거리입니다. Flutter는 많은 발전을 하고 있고, 채용공고도 꽤 많아졌을 만큼 모바일 개발에서 핫한 프레임워크가 되고 있습니다. 물론 현업에서 쓰기에는 아직도 이슈가 좀 있어 보이지만, 그래도 꽤 큰 IT회사에서 채택하는 경우도 점점 늘고 있습니다. 이런 상황에서 Kotlin Multiplatform도 점점 발전하면서 사람들의 관심을 끌고 있는데요. 안타깝게도 프로덕션 레벨에서 쓰기에는 안정적이지 않았습니다. 저도 간단한 예제를 통해 어떤 것인지 학습정..

개발/Android 2023.11.04

Android - 상태관리, LiveData 대신 StateFlow를 사용하자.

현재 안드로이드 생태계는? 현재 안드로이드 생태계는 MVVM 아키텍처, 클린아키텍처가 대세가 되고, MVI 아키텍처가 점점 핫해지고 있다. 그만큼 개발 기술이 빠르게 발전하고 있고, 더욱 강력한 도구들이 생겨나고 있다는 것이다. Google에서 Android Architecture Compoenent로 여러가지 도구를 제시하고 있고, 그 중에 ViewModel과 LiveData는 정말 핫하고 유용하며, 현재 안드로이드 앱 개발에 있어서 가장 기본적인 도구로 몇년동안 자리잡고 있다. 그러나 시간이 지나면서 이들도 구시대의 기술이 되어가는 것은 당연하다. 영원히 최고의 도구는 없으니까. 오늘은 그 중 하나인 LiveData에 대해, 그리고 이를 대체할 StateFlow에 대해서 얘기해본다. 상태관리, 그리고..

개발/Android 2023.08.03

Android - DataStore로 SharedPreferences를 대체하자.

어플리케이션을 개발하다보면 앱 내부에 데이터를 저장해야 할 때가 있다. 그 중에서 어떤 유저가 특정 기능을 활성화 했는지 여부와 같이 굉장히 작은 규모의 데이터가 저장되어야 할 때가 있다. 이럴때 우린 SharedPreferences를 사용해서 저장하곤 했다. 하지만 SharedPreferences는 여러가지 단점이 있다. UI쓰레드에서 호출하기에 안전하지 않고, 예외나 런타임 안정성 등이 있다. 그리고 비동기 API에 대한 대응도 부족한 편이다. 이런 단점 때문인지, 구글에서 이를 보완하기 위해 Jetpack DataStore를 개발하였다. https://developer.android.com/topic/libraries/architecture/datastore?hl=ko 앱 아키텍처: 데이터 영역 -..

개발/Android 2023.07.07

Android Compose - LazyColumn의 최하단 스크롤 이벤트 감지하기

안드로이드 앱을 개발하면서 스크롤이 있는 레이아웃 요소는 흔하게 사용된다. 예를 들자면 ScrollView, RecyclerView와 같은 것들이다. 스크롤이 있는 레이아웃 요소를 사용할 때 스크롤에 대한 이벤트 처리, 특히 최하단에 도달했는지 여부를 확인해야하는 경우가 종종 있다. 이를테면 데이터가 페이징되어 있을 때다. 스크롤이 최하단에 도달했을 때 API 등을 호출하여 추가적인 데이터를 로드하고 스크롤 레이아웃에 아이템을 추가하는 것과 같은 것이다. Android Compose는 이와 유사한 것으로 LazyColumn, LazyRow를 사용하곤 하는데, 둘은 스크롤 방향만 다르고 LazyColumn이 주로 사용될 것이다. 기존의 XML 레이아웃 요소와 다르게 LazyCoulmn은 어떻게 스크롤에 대..

개발/Android 2023.06.10

Android - Deep dive into LiveData - 3. Transformations(map, switchMap)

LiveData를 사용할 때 LiveData가 변경되었을 때 값을 수신하고 다른 형태의 데이터로 변환해야 하는 경우가 있다. 예를들면 아래와 같은 상황을 보자. data class User( val firstName: String, val lastName: String, val nickName: String, ... ) private val _userLiveData: MutableLiveData = MutableLiveData() User 객체를 얻어왔을 때, UI에는 firstName과 lastName만을 수신해야한다고 가정해보자. Activity/Fragment에서 User를 UI에서 가공해야 할까? 이는 바람직하지 않다. 왜냐하면 데이터의 가공은 ViewModel 레이어에서 이루어지고, UI는 단지..

개발/Android 2023.01.28
반응형