전체 글
-
LiveData에서 Flow로 마이그레이션안드로이드 2023. 4. 17. 15:19
RoomDB 객체 목록 가져오는 부분을 LiveData에서 Flow로 변경하여 데이터의 계층과 아키텍처 스타일 코드 준수 LiveData의 경우 UI와 밀접하게 연결되어 있어 UI가 아닌 다른 레이어에서 사용하기 적합하지 않았습니다. 그렇다고 LiveData를 사용하지 않고 Data를 가져오는 get 스타일의 코드를 작성한다면 MVVM 아키텍쳐가 뚜렷하게 구현되지 않을 것이라고 생각했습니다. 그래서 앱의 다른 레이어에서 코루틴 범위에서 작업을 실행하는 Flow로 수정하여 data 레이어와 UI를 분리시키고 MVVM 스타일에 맞는 코드를 지키려고 노력하였습니다. 개요 깃허브 북마크 앱을 개발하며 Room을 사용하여 로컬 데이터베이스에서 데이터를 가져올 때 UI 스레드와 밀접하게 연결되어 있는 LiveDat..
-
Retrofit을 사용한 이유를 '깊게' 얘기해보기안드로이드 2023. 4. 11. 15:10
프로젝트를 하면서 HTTP 통신을 할때 고민없이 Retrofit2, Okhttp3 의존성을 추가해 사용했습니다. 그 이유를 명확히 하고 사용하지 못했다는 생각이 들어 Retrofit이 왜 가장 대중적인 통신 라이브러리가 되었는지의 과정을 이해하면서 Retrofit을 사용한 이유를 '깊게' 얘기해보도록 하겠습니다. 네트워크 프로그램을 작성하는 이유 네트워크 프로그램을 작성하는 이유는 클라이언트 프로그램과 서버 프로그램간에 데이터를 송수신하기 위해서입니다. 안드로이드 앱은 HTTP 네트워크의 클라이언트 프로그램으로, 통신하기 위해 서버 프로그램이 필요합니다. 안드로이드 앱에서 HTTP 통신 프로그램을 구축하는 방법은 1. 플랫폼 API를 이용하는 방법 2. 다양한 라이브러리를 활용하는 방법(Retrofit,..
-
내가 가지고 있는 애매한 재능들성장일기 2023. 4. 9. 23:04
애매한 재능이라고 바라보는 시각을 바꿔야한다. 나 정도 하는 사람은 이미 많다라는 생각을 버리고 내가 가진 재능을 더 이상 얕보지 말아야 한다. 애초에 자기가 가지고 있는 재능을 '애매함'이라는 단어로 수식하지 말고 그냥 재능이라고 이름 붙이자. 내가 재능을 가지고 있다. 그리고 애매한 재능이 여러개라면 나는 재능이 여러개 있다라고 생각하자. 여러개의 재능을 조합하면 특별한 재능이 된다. 하나를 붙잡고 이를 열심히 하는것이 가장 애매하다. 나 이거는 애매하네가 아닌 나 이거에 재능이 있네로 생각하며 재능의 총량을 키우는 것이 중요하다. 내가 이렇게 할 줄 아는게 많은 사람이고, 여러 재능을 모아서 단 하나의 제너럴리스트가 되면 된다. 항상 자신의 가능성을 열어두고 새로운 일을해보자 남들 다 하는거, 이미..
-
❗️네트워크 문제: Cleartext HTTP traffic to shehj.com not permitted소소한팁 2023. 4. 7. 23:54
안드로이드 어플에서 HTTP통신을 통해 서버에 접근하는 경우 발생하는 오류입니다. API Level 28(Android 9)부터는 보안 강화 목적으로 앱에서의 HTTP 통신이 기본으로 금지되어 있어서 HTTP를 계속 이용하겠다면 별도로 설정해 주어야 합니다. HTTP 통신 방법 Android Manifest 파일의 Application 탭 내에 usesCleartextTraffic을 true로 설정하면 Http로도 통신할 수 있습니다. 모든 HTTP 도메인에 접근을 허용하려면 위에서 처럼 설정하면 되지만, 통신을 허용할 도메인을 미리 지정하고 싶은 경우에는 아래와 같이 명시하면 됩니다. xxx.xxx.xxx.xxx
-
DiffUtil, ListAdapter로 RecyclerView 성능 개선안드로이드 2023. 2. 5. 15:22
RecyclerView만을 사용하다보니 하나의 데이터를 변경하는 경우에도 전체 데이터를 리프레쉬 해야하는 불필요한 과정을 겪게 되었습니다. ListAdapter와 DiffUtil을 적용 후 변경이 필요한 코드만 변경할 수 있게 되어 데이터 불러오는 속도를 높일 수 있었습니다. 개요 메모장 앱을 개발하며 이미 저장한 데이터를 수정하는 기능을 구현할 때, 사소한 변경임에도 지금껏 notifyDataSetChanged() 한 줄로 리사이클러뷰를 갱신하고 있었습니다. fun updateNotes(notesList: List) { this.notesList = notesList notifyDataSetChanged() } 이렇게 코드를 작성하게 된다면, 아이템 딱 하나가 바뀌는 상황이더라도 리스트를 지우고 다시 ..