개발 노트/Kotlin (102) 썸네일형 리스트형 [Android/Kotlin] Paging3란? # Paging3란? 페이징 라이브러리는 로컬 데이터베이스 또는 네트워크(Remote)의 데이터를 페이지 단위로 UI에 쉽게 표현할 수 있도록 도와주는 라이브러리다. 라이브러리를 사용하지 않고 기존에 ScrollListener을 사용해서 무한스크롤을 구현하기 위해서는 RecyclerView와 같은 리스트 UI가 상단 또는 하단에 도달했는지 판단하는 코드를 작성하고, 다음 페이지를 로드(or Refresh)하는 코드를 또 작성해야만 했다.(이땐 네트워크오류, 스크롤 감지 이상과 같은 현상이 발생할 가능성 있음) 페이징은 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라, 일정한 덩어리(페이지)로 나눠서 가져온다예를 들어, 구글에서 어떤 키워드로 검색하게 되면 결과의 모든 데이터를 한 번에 .. [Android/Kotlin] collect과 collectLatest의 차이점? [Flow] collect는 flow에서 발행되는 모든 데이터를 순서대로 처리하는데 반해,collectLatest는 flow에 새로운 데이터가 들어오면 기존 suspend 작업을 버리고 새로운 suspend 작업을 수행한다 paging에서는 flow 데이터가 시간에 따라 계속 갱신되고 기존 데이터는 무효화되는 구조를 갖고 있으므로 구글은 UI에 expose하는 데이터에 대해서는 collect가 아닌 collectLatest를 쓰도록 권장하고 있다https://medium.com/androiddevelopers/fetching-data-and-binding-it-to-the-ui-in-the-mad-skills-series-cea89868b3e1 # collect과 collectLatest의 차이점은 무엇일까?F.. [Android/Kotlin] Flow 란? (StateFlow, SharedFlow) Flow는 LiveData의 Android 플랫폼 종속적이고 UI가 없는 곳에서 LiveData를 사용하기가 어렵다언어 의존성(kotlin)만 지니는 domain layer 에서는 liveData를 쓰기 어렵다위의 두 문제를 해결하기위해 탄생함 즉, Flow를 사용하면클린아키텍처 관점에서 LiveData는 플랫폼 종속적이므로 Domain 계층에 사용할 수 없지만, Flow는 Domain 계층에 사용할 수 있다결과를 필터링하는 등의 다양한 기능을 하는 함수들을 사용할 수 있다크게 위와같은 장점이 있다 # Flowfun simple(): Flow = flow { // flow builder for (i in 1..3) { delay(100) // pretend we are doing.. [Android/Kotlin] Hilt란? # Hilt란?공식문서에 정리되어있는 Hilt의 정의이다Hilt는 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써, 애플리케이션에서 DI를 사용하는 표준 방법을 제공합니다. 그럼 DI란 뭘까?DI는 Dependency Injection의 약자로, 의존성 주입을 뜻한다특정 한 객체가 다른 객체를 필요로 할 때 이 의존성을 제공하는 기술이 DI이다객체가 다른 객체를 필요로 하면, 외부에서 해당하는 객체를 생성하여 필요한 객체에 넘겨주게 된다 DI는 아래와 같은 장점이 있다.코드 재사용성 향상결합도 감소테스트 용이성의존성을 가짜 객체나 Mock 객체로 대체하여 테스트 수행 가능코드의 유연성 및 확장성, 가독성 향상새로운 기능을 추가하거나, 기능을 수정할 때 미치는 .. JSON 보기편하게 변환 해주는 사이트 아래 사이트를 사용하면 이렇게 보기 힘들게 되어있는 Json 데이터들을 이런식으로 좀 더 보기 편하게 바꿔준다. 그냥 JSON데이터를 복붙해주면 된다 # Json 보기 편하게 바꿔주는 사이트https://codebeautify.org/jsonviewer# Best JSON Viewer and JSON Beautifier OnlineOnline JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.codebeautify.org http://jsonviewer.stack.hu/ Online JSON .. [Android/Kotlin] Google Map API 사용해서 구글 지도맵 만들기 # GoogleCloud에서 사용자 인증키 만들기GoogleCloud에 접속하여 구글 계정으로 로그인한다 프로젝트가 생성되어있지 않다면 새프로젝트를 눌러서, 이름을 적고 새 프로젝트를 생성해준다 API 및 서비스 -> 사용자 인증정보 클릭 사용자 인증정보 만들기 -> API 키 클릭 API 키가 생성되었다 (지금은 API키 제한을 안걸어두었지만, 제한을 걸어서 사용해줄 수도 있다)https://developers.google.com/maps/documentation/android-sdk/start?hl=ko#enable-api-sdk Android용 Maps SDK 빠른 시작 | Google for Developers지금 바로 Android 앱용 Google 지도 프로젝트를 새로 시작해 보세.. [Android/Kotlin] 사용자 위치 얻기 # 위치 접근 권한 사용자의 위치를 추적하기위한 3가지 권한android.permission.ACCESS_COARSE_LOCATION : 와이파이나 모바일 데이터(또는 둘 다)를 사용해 기기의 위치에 접근하는 권한 (도시에서 1블록 정도의 오차 수준)android.permission.ACCESS_FINE_LOCATION : 위성, 와이파이, 모바일 데이터 등 이용할 수 있는 위치 제공자를 사용해 최대한 정확한 위치에 접근하는 권한android.permission.ACCESS_BACKGROUND_LOCATION : 안드로이드 10(API 레벨 29) 이상에서 백그라운드 상태에서 위치에 접근하는 권한 # 권한 설정안드로이드 애플리케이션에서 특정 기능을 사용하기 위해서는 해당 기능에 필요한 권한을 사용자로부.. [Android/Kotlin] Room DataBase 활용 예제 안드로이드에서 앱의 데이터를 저장하는 방법은 여러가지가 있는데그 중 데이터 베이스 프로그래밍을 이용하여 안드로이드 폰에서 DB를 관리하는 오픈소스 SQLite 가 있다 Room DB는 이런 SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 제공한다 Room DB의 이점SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리쉽게 Query를 사용할 수 있는 API를 제공Query를 컴파일 시간에 검증함Query결과를 LiveData로하여 데이터베이스가 변경될 때 마다 쉽게 UI를 변경할 수 있음SQLite 보다 Room을 사용할 것을 권장함 # 예제앱 만들어보기 EditText에 학생에 대한 id와 이름을 입력하고 Add Student버튼을 누르면, Student L.. [Android/Kotlin] SharedPreferences 사용해서 데이터 저장하기 SharedPreferences는 앱에서 데이터를 저장하는 방법중에 하나로, 앱 내부 DB 라 말할 수 있다 예를들어, 로그인을 할 때 앱 재실행 시 최근 로그인 한 아이디를 표시하기 위해 아이디 저장 여부가 필요할 때DB에 저장할 필요가 없이 앱 내부에 저장을 하면 된다. 이때 사용하면 좋은 것이 SharedPreferences 이다 다른 DB와 다르게 SharedPreferences는 간단한 데이터를 저장하기 위해 사용한다. (SharedPreferences에는 큰 값을 저장하거나 많은 값을 저장하면 앱이 느려질 수 있으니 작은 값들을 적게 저장해야한다)또한 앱 내부에 xml 파일로 저장이 되며 데이터와 함께 설정된 keyValue 를 통해 Save/Load 할 수 있다.데이터의 보존은 앱이 삭제되기.. [Android/Kotlin] 멀티뷰타입 리사이클러뷰 MVVM패턴으로 수정(Observer Pattern 사용) https://coding-juuwon2.tistory.com/287 [Android/Kotlin] Multi View Type 리사이클러뷰 구현하기일반적인 리사이클러뷰는 하나의 뷰형태만 보여주고 데이터만 달라지지만,리사이클러뷰 멀티뷰타입을 사용하면 다수의(다른) 뷰형태를 가지는 아이템을 보여줄 수 있다 이런식으로 멀티뷰타coding-juuwon2.tistory.com 이때 만들었던 멀티뷰타입 리사이클러뷰를 MVVM패턴으로 수정해볼것이다근데 아직 LiveData를 쓰지는 않고, Observer Pattern을 사용해서 수정해볼것이다 # 상수정의// enum class로 열거형 클래스로 만들기 (코드 단순, 가독성 up)enum class MultiViewEnum(val viewType : Int) .. 이전 1 2 3 4 5 6 ··· 11 다음