Android18 Paging, 안드로이드에 맞는 커서 페이징 방식으로 구현하기 Paging, 안드로이드에 맞는 커서 페이징 방식으로 구현하기 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 프로젝트를 진행하면서 고민했던 페이징 방식에 대해 설명드리려고 합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. Paging? 엉청나게 많은 데이터를 서버에서 한 번에 가져와 보여주려고 하면 무리가 있기 때문에 페이지 단위로 나누어 보여주는 것을 페이징이라고 합니다. 흔히 볼 수 있는 카페 게시글 형태가 페이징을 사용해서 보여주는 대표 예입니다. Offset 방식 카페 게시글 형태와 같은 경우 쓰는 방식입니다. 시작 점인 Offset과 시작 점으로부터 몇 개를 가져올 것인 지 Limit을 정해 데이터를 가져오는 방식입니다. Offset이 1, L.. 2023. 6. 6. 코틀린(Kotlin)과 자바(Java)의 차이점 코틀린(Kotlin)과 자바(Java)의 차이점 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 코틀린과 자바의 차이점에 알게된 내용을 알려드리려고 합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 코틀린과 자바에 대해 조금 아시는 분이라면 코틀린이 자바보다 문법이 간결하며 사용이 편해 생산성이 증대되고 Nullable 타입이 존재하기 때문에 널 안정성을 갖고 있다는 것을 알고 계실 것 입니다. 이 부분에 대해 더 자세히 알아보고 다른 장점에 대해서도 설명해드리려고 합니다. 생산성 1. 문법 Kotlin은 세미 콜론을 작성하지 않고 여러 함수들이 사용하기 편하게 작성되어 있습니다. String으로 타입을 변경할 때에도 변수 뒤에 .toString() 만 .. 2023. 6. 1. CoroutineDispatcher.Main.immediate 알아보기 Dispatcher.Main.immediate 알아보기 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 코루틴 관리를 효과적으로 하고자 공부했던 내용을 공유해보려고 합니다. 코루틴에 대한 기본적인 내용과, Dispatchers.Main.immediate, 코루틴의 동작을 담고 있습니다. 여러분들은 viewModelScope의 내부를 들여다본 적이 있으신가요?? 아래는 viewModelScope의 내부 코드 입니다. public val ViewModel.viewModelScope: CoroutineScope get() { val scope: CoroutineScope? = this.getTag(JOB_KEY) if (scope != null) { return scope } return se.. 2023. 5. 31. Clean Architecture 궁금했던 점 살펴보기 Clean Architecture 궁금했던 점 살펴보기 안녕하세요 이번에는 Clean Architecture에 대한 주의점과 궁금했던 부분에 공부한 내용을 공유해드리려고 합니다. Clean Architecture에 대한 기본 개념에 대한 설명은 너무 많은 블로그가 존재하기 때문에 생략하고 설명드리겠습니다. 클린 아키텍처는 왜 유지보수에 용이할까? 관심사를 분리함으로써 필요한 계층만 추가, 수정하면 되므로 더 편리합니다. 결합도를 낮추어 수정에 용이합니다. 의존성 주입을 사용해 결합도를 낮추도록 합니다. 이렇게 하면 상위 계층이 하위 계층의 구현으로부터 독립되기 때문에 하위 계층의 변화에 영향을 받지 않습니다. (의존성 역전 원칙) UseCase가 필요한 이유 UseCase가 없으면 ViewModel이 비.. 2023. 5. 31. 6. SharedPreference에서 DataStore로 변경하여 데이터 일관성 문제 해결하기 (RunWithMe 리팩토링) 6. SharedPreference에서 DataStore로 변경 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이번 프로젝트에서 기존에 사용하던 SharedPreference를 DataStore로 변경하고자 했습니다. SharedPreference가 가진 문제점 때문이었습니다. 여러분들은 SharedPreference의 문제점에 대해 알고 계신가요???? SharedPreference의 문제점에 대해서 ChatGpt에 물어보겠습니다. gpt 답변: 안드로이드에서 Share.. 2023. 5. 30. 5. CustomView로 재사용성 향상 (RunWithMe 리팩토링) 5. CustomView로 재사용성 향상 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이전에 ‘우리집’이라는 프로젝트를 Compose로 진행했던 경험이 있습니다. 컴포즈를 사용하면서 제일 좋았던 점은 Component 재사용성이 뛰어나다는 점이었습니다. xml에서도 custom view를 활용해 view 재사용성을 향상시키고자 했습니다. 다른 뷰는 재사용하는 부분이 거의 없어 가장 많이 사용하는 Toolbar에 CustomView를 적용하였습니다. Toolbar는 총 4.. 2023. 5. 27. 4. EventFlow 도입 (RunWithMe 리팩토링) 4. EventFlow 도입 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이 글은 Ted Park님의 블로그를 참고하여 작성했습니다. MVVM의 ViewModel에서 이벤트를 처리하는 방법 6가지 MVVM의 ViewModel에서 이벤트를 처리하는 방법 6가지 지금 개발하시는 코드에서 ViewModel의 이벤트 처리를 어떻게 하고 계신가요? 헤이딜러에서 LiveData -> SingleLiveData -> SharedFlow -> EventFlow로 이벤트 처리 방법을 변.. 2023. 5. 26. 2. bindService를 적용하여 메모리 누수 방지하기 (RunWithMe 리팩토링) 2. bindService 적용하여 메모리 누수 방지하기 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 배우게 된 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. startService와 bindService Service를 제대로 적용하기 위해 Service에 대해 공부했고 그 중 startService와 bindService의 차이점을 명확히 알고자했습니다. 아래는 startService와 bindService에 대한 설명입니다. 안드로이드에서 startService()와 bindService()는 서비스를 시작하는 두 가.. 2023. 5. 25. 1. LifecycleService와 Service의 차이점 (RunWithMe 리팩토링) 1. LifecycleService와 Service의 차이점 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 배우게 된 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. LifecycleService 이건 뭐지?? 이전 RunWithMe 프로젝트 코드를 들여다보던 중에 러닝에 관한 서비스를 LifecycleService를 상속받아 사용하는 것을 보게되었습니다. LifecycleService는 무엇이고 그냥 Service와의 차이점에 대해서 궁금증이 생기게 되었습니다. 바로 LifecycleService를 들여다보았습니다. Serv.. 2023. 5. 25. 이전 1 2 다음