전체 글 (103) 썸네일형 리스트형 FireBase 의존성 주입 생각해보기 👩💻 오늘의 할 일오늘은 지난 글에서 개선점으로 꼽았던 불필요한 DataSource에 대한 의존성 분리와 실제 사용 코드에서 UseCase를 한 번 만들어보겠습니다. 또한 지난 프로젝트에서 사용했던 코드를 리뷰하면서 필요한 의존성을 왜 ? 어떻게 ? 주입을 했을까에 대한 생각을 적어보려 합니다. 물론 DI 라이브러리는 사용하지 않았지만 먼저 의존성 주입이란 무엇일까에 대해 알아보고 가겠습니다.👩🏫 의존성 주입이란 ?의존성이란, 어떤 대상이 참조하는 객체나 함수를 의미합니다. 다음 코드와 같이 Car Class에서 Engine( ) 클래스의 인스턴스를 생성하면 Car는 Engine에 의존하게 됩니다. 이때, Car Class는 Engine 인스턴스를 생성하는 책임을 갖고 있으며 Car Class.. Android Repository 패턴 👩💻 오늘의 할 일멋쟁이 사자처럼에서 진행한 팀 프로젝트를 진행하면서 처음으로 Repository 패턴을 사용해 봤습니다. 개인 프로젝트에서도 Repository를 사용하긴 했지만 제대로 공부하다 보니까 제가 잘못 사용 중인걸 알게 되었습니다. 앞으로 클린 아키텍처를 공부하는 데 있어서 큰 발판이 된 경험이 되었기 때문에 한번 정리해 보겠습니다.👩🏫 Repository 패턴이란?Repository는 ViewModel에서 DataSource에 접근할 때 직접 DataSource에 접근하는 것이 아니라 Repository를 통해 데이터를 관리하고 접근합니다. 이를 통해서 ViewModel은 단순히 UI 상태(State)를 관리하고 비즈니스 로직을 처리하는 데 집중할 수 있으며, 데이터 액세스.. ViewLifeCycleOwner 제대로 알고 사용해보자 👩💻 오늘의 할 일그동안 단순히 액티비티와 프래그먼트에서는 생명주기를 가지는 컴포넌트에서는 해당 컴포넌트의 생명주기에 종속되는 코루틴을 사용해야 한다고 알고 있었습니다. Activity에서는 lifeCycleScope, Fragment에서는 ViewLifeCycleOwner를 사용하는게 바로 이 이유죠. 그렇다면 왜 두 컴포넌트는 각각 다른 코루틴을 사용하는 걸까요? 이는 Fragment의 두 가지 생명주기와 깊은 연관이 있습니다. 저도 안드로이드 개발을 시작한지 약 반년이 다되어 가도록 이 프래그먼트의 두 가지 생명주기에 대해 놓치고 있던 내용이라 한 번 정리하겠습니다. 📖 Fragment의 두 가지 생명주기처음 Fragment LifeCycle에 대해 공부할 때도 봤던 그림인데 제가 간과한.. [GiHub] 이미 Push한 파일 gitIgnore으로 숨기기 👩💻 오늘의 할 일프로젝트를 하던 중 아무 생각 없이 모든 파일을 Push해서 google-service.json 파일까지 모두 올라가 버렸습니다. 민감한 정보가 올라가 있는 파일들은 Public으로 공개될 경우 무시 무시한 결과를 초래할 수 있어 .gitignore에 등록하여 업로드 되지 않도록 설정해야 합니다. 오늘은 이미 Repository에 Public으로 올라가 있는 파일을 gitignore를 통해 숨기는 방법을 알아보겠습니다.📜 . gitignore 파일 수정하기먼저 gitignore 에 숨길 파일들을 지정해줍니다.# Android Studio Navigation editor temp files.navigation/# Android Studio captures folder.. Room Like + StateFlow debouce와 Throttle 👩💻 오늘의 할 일 오늘은 Room의 검색 기능에서 사용되는 Like, StateFlow에서의 Debounce와 Throttle를 실제 프로젝트에 적용하기 위해 사전 공부를 해보겠습니다. Room과 StateFlow의 새로운 기술이라니 벌써부터 두근두근 잼있을거 같네요! 📖 SQL LIKE SQL Query에서의 Like는 특정 문자가 포함되어 있는지 검색할 때 사용됩니다. Like는 ' % ' 로 표현되는데, 그 위치에 따라 다르게 동작하게 됩니다. 1. 특정 문자로 시작하는 데이터 검색 SELECT * FROM STORE_INFO WHERE STORE_NAME LIKE '%짱구'; 2. 특정 문자로 끝나는 데이터 검색 SELECT * FROM STORE_INFO WHERE STORE_NAME LIK.. 코틀린 코루틴의 정석, 세 걸음 👩💻 오늘의 할 일정말 오랜만에 책을 피는 것 같습니다. 얼레벌레 바빠서 책을 볼 시간이 없었는데 일주일에 한 번씩 스터디 팀원분들에게 이 책을 가지고 코루틴에 대해 알려드릴 수 있는 좋은 기회가 생겨서 꾸준히 읽을 수 있게 되었습니다. 어떤 개념을 내가 정확히 알고 있다고 말하기 위해선 이 개념을 다른 사람에게 설명할 수 있어야 한다고 생각하는데, 감사하게도 부족한 제 이야기를 들어주실 사람이 생겨서 너무 감사하네요. 이번 챕터의 주제는 CoroutineDispatcher입니다. 그동안 제가 알고 있던 CoroutineDispatcher는 작업 스레드를 지정하기 위한 용도라고 알고 있었는데 이외에도 어떤 역할을 하는지 한번 알아보겠습니다. 📖 CoroutineDispatcher란?우선 .. [Kotlin]Sealed Class란 무엇일까 ? 👩💻 오늘의 할 일오늘은 Kotlin의 Sealed Class에 대해 알아보겠습니다. 이전 동아리 면접 질문에서 Sealed Class와 Enum Class의 차이점을 물어봤는데 아예 몰라서 대답을 못했던 경험이 있어서 이 부분에 대해서도 한번 알아보고 가겠습니다. 멋사에서 Kotlin 수업을 들을 때 한 번 들었었는데 좀 더 자세히 알아보려고 합니다.🔥 수업 시간에 배운 Sealed ClassSealed Class는 자기 자신을 상속받은 클래스들을 모아 관리하는 개념입니다. Kotlin의 클래스와 그 멤버 함수들은 final이기 때문에 상속될 수 없습니다.sealed class는 그 자체로 추상적이기 때문에 open 키워드로 메서드를 상속할 수 있습니다fun main() { val obj1.. Coroutine SharedFlow 👩💻 오늘의 할 일서버로에서 가져온 데이터를 기반으로 경도와 위도를 사용해서 지도에 마커를 표시해주고 있습니다. 문제는 처음 지도를 보여주는 Fragment가 생성되면 정상적으로 마커가 표시 되지만 BottomNavigation으로 다른 Fragment로 전환 후 다시 지도로 돌아오면 마커가 표시되지 않는 문제가 발생했습니다.서버의 데이터는 ViewModel에서 StateFlow로 받아왔습니다. 그래서 저는 문제의 원인을 StateFlow로 특정했습니다. StateFlow를 원인으로 삼은 이유는 StateFlows는 중복된 값을 방출 하지 않는다는 점 때문입니다. 자세한 글은 앞선 포스팅을 참고해주세요! 지난 1월 15일 작성했던 글을 처음으로 StateFlow를 사용했고 SharedFlow를 .. 이전 1 2 3 4 5 6 7 ··· 13 다음