-
[비공개] 아이패드 사이드카 좋네요
이번 블프때 구매한 아이패드7세대가 도착해서 사이드카 기능을 처음으로 이용해보았습니다 사이드카 기능은 아이패드를 맥북의 보조모니터로 쓸수 있는 기능인데요 확장 모니터로 쓸수도 있고 미러링 모드로도 쓸수 있습니다. 와이파이나 블루투스만 되면 자동으로 연결되지 않으려나 했는데 양쪽 디바이스 모두 같은 애플 아이디 로그인이 추가적으로 필요하더라구요 (왠지 느낌상 아이클라우드도 둘다 로그인이 되어있어야하는것 같습니다) 와이파이, 블루투스가 켜져있고, 같은 애플아이디로 로그인이 되어있다면 맥북에서 아이패드가 감지가 되는데요 사이드카 메뉴에서 연결을 시도하니 계속해서 이러한 오류가 나오더라고요 검색해보니깐 다른 분들은 애플아이디를 로그아웃하고 다시 로그인하라고 많이들 하시길래 똑같은 방..추천 -
[비공개] dagger2 android viewmodel 과 사용하기
안드로이드 공식 문서에 있는 ViewModel의 간단한 예제이다 그도그럴것이 MyViewModel의 생성자에 아무런 인자가 없다 그러니깐 별도의 의존성을 고민할 필요 없이 ViewModelPrivoder를 통해 ViewModel을 생성해서 쓰면 된다 하지만 실제로는 생성자에 아무런 파라메터도 던져지지 않는 형태의 viewmodel을 쓰는 경우가 거의 없다 viewmodel이 UI에 표시할 데이터를 보여주기 위해 필요로 하는 여러 인스턴스들을 넘겨줘야한다(repository나 usecase 같은 것들) 그래서 안드로이드는 Factory라는 클래스를 통해서 viewmodel에 원하는 인자를 넣어 생성할수 있도록 하는 방법을 제공해준다 ViewModelProvider.Factory 를 구현 했다 위의 예제에서는 간단하게 string을 인자로 받는 MainViewModel을 생성했다 이 예제 처럼 create 메소드가 새 인스턴스를 리턴할때 무언가를 넣어서 인스..추천 -
추천
-
[비공개] Android Architecture Components ViewMo..
MVVM 패턴에서 우리는 viewmodel에 UI에 표현할 모든 데이터를 담아 view와 연결합니다 view는 단지 viewmodel의 존재만 알고 있으면 됩니다. viewmodel이 데이터베이스나 네트워크를 통해 로드된 데이터를 보관하고 있기때문에 view는 그 어떤 비즈니스로직을 가지고 있지 않습니다 안드로이드 앱을 개발하다보면activity나fragment가 UI코드는물론비즈니스코드까지포함해서엄청거대해지는것이가장흔한일중의하나입니다. 그래서 이러한 방법을 통해 view가 비즈니스로직까지 포함하여 너무 뚱뚱해지지 않도록 합니다 그렇기에 MVVM 패턴은 안드로이드 앱개발에서 있어서 매우 유용한 패턴중의 하나입니다 android jetpack의 구성요소중 하나인 ViewModel은 이러한 패턴을 좀 더 걱정없이 더 적은 코드로구현할수 있도록 돕습니다 ViewModel의 도우미 클래스를 제공합니다 ..추천 -
[비공개] dagger에 context를 주입하는 좋은 방법 @BindsInst..
안드로이드 앱을 실행하고 우리가 얻을수 있는 인스턴스중에 하나가 바로 context인데 context는 안드로이드 앱의 구석구석에서 필수적으로 쓰인다 SharedPreferences를 가져올때도 필요하고, 특정 퍼미션의 기능을 호출할때도 쓰이고 안쓰이는 곳이 없다 그런데 context 객체는 우리가 직접 만들수 있는게 아니라 안드로이드 시스템이 만들어주는 객체이기때문에 우리가 만든 클래스들이 context를 사용하기 위해서는 이 값을 파라메터를 통해서 전달받아야 한다 context를 dagger의 그래프 안으로 어떻게 주입할까? 앱이 실행되어있다면 context는 이미 사용가능한 상태이기때문에 우리는 이 값을 dagger에게 전달만 하면된다 context를전달할수있는방법은여러가지가있는데 아래의 방법이 가장 많은 곳에서 찾을수 있는 예제다 AppModule의 생성자파라메터로 Context를..추천 -
[비공개] dagger의 @binds 활용
dagger에서 추가적으로 알아두면 좋은 어노테이션들이 있다 이 포스팅에서 설명하는 @binds는 몰라도 dagger를 사용하는데 전혀 지장이 없지만 이 어노테이션을 사용했을때 훨씬 깔끔하고 적은 코드만으로 원하는 목표를 달성할수 있기때문에 알아두면 좋다 @Binds 어노테이션 dagger에게 인터페이스를 공급할때 어떤 구현체가 필요한지 알려줄수 있다 @Binds어노테이션은반드시abstractfunction에쓰여야한다 abstractfunction의리턴타입은우리가공급하려고하는구현체의인터페이스여야한다 설명만으로는 다소 부족하니 코드를 보자 무언가를 저장할수 있는 Storage라는 인터페이스가 있다 저장되는 공간에 따라 우리는 다양한 Storage를 구현한 구현체를 만들수 있다 android의 SharedPreference를 사용하는 Storage의 구현체인 SharedPreferencesStorage라는 클래스를 만들었다 ..추천 -
[비공개] dagger의 서브그래프의 핵심 subcomponent
이전의 두개의 포스팅을 통해 의존성을 주입하는 여러가지 방법에 대해 알아봤고 dagger를 통해서 의존성을 주입하는 방법까지 알아보았다 이제 정말로 dagger의 강이 있다면 반은 건너왔다 여기서부터 고난이 시작될수도 있다 최대한 설명을 쉽게 풀어서 써보겠지만 얼만큼이나 전달이 될지 모르겠다 그렇지만 우리는 계속 앞으로 나아가야하기에 중요한 개념중의하나인 subcomponent를 알아보자 이전의 예제에서로그인 플로우(LoginActivity에 의해서 관리되는)는 2개의 프래그먼트를 가지고 있다 상황에 따라 얼마든지 여러개의 프래그먼트를 사용할수 있다 로그인 플로우의 모든 프래그먼트에서 같은 LoginViewModel의 인스턴스를 사용하려고 한다 하지만 그렇다고 @Singleton 어노테이션을 LoginViewModel에서 사용하기는 영 깔끔하지 못하다 @Singleton 어노테..추천 -
[비공개] dagger를 통한 의존성 주입 안드로이드 실전
지난번에는 ServiceLocator를 통해 의존성을 주입하는 방법과 직접 의존성을 주입하는 방법에 대해서 알아보았다 이제 dagger를 통한 의존성을 주입하는 방법에 대해서 학습해보자 * dagger는 우리가 이전 포스팅에서 작성했던 AppContainer 코드를 자동으로 생성해준다 * 팩토리 클래스를 생성해준다 * 설정에 따라 의존성을 재활용하거나 새로운 인스턴스를 만들어준다 * LoginContainer와 같이 특정 기능을 위한 콘테이너를 생성한다 더이상 필요 없을때 메모리에서 해지할수있기때문에 앱의 성능향상이 된다dagger는컴파일타임에마치직접만든코드처럼어노테이션에의해코드를생성한다 내부적으로 dagger는 그래프를 만드는데(객체를 어떻게 공급하고 만드는지에 대한 일종의 지도라고 생각하자) 일종의 이것은 인스턴스를 어떻게 공급할지에 대한 참조를 가지고..추천 -
[비공개] 의존성 주입에 대한 기본 이해
위의 그림은 안드로이드 아키텍쳐를 공부하다보면 자연스럽게 접할수 있는 그림이다 클린 아키텍쳐를 공부하면 자연스럽게 또 접하게 되는 것이 의존성주입(DI)이라는건데 의존성 주입을 통해서 코드의 재사용을 높이고, 테스트가능한코드가 생성되며, 보일러플레이트 코드가 제거된다는 장점이 있다. 의존성 주입에 대해서 공부하다보면 android에서 가장 인기가 많은 dagger 가 빠질수 없다. kotlin 기반의 프로젝트라면 koin이라는 의존성주입 프레임워크도 많이 쓰이고 있지만 java 및 kotlin 프로젝트를 모두 지원하는 dagger가 인기가 가장 많다 이러한라이브러리의종류에는 런타임에서의존성을주입하는방법과 컴파일에서의존성을주입하는방법이있다 구글이유지보수하는dagger는java,kotlin,android에서사용가능한의존성주입라이브러리이고 컴파일단에..추천 -
[비공개] 아이폰 앱개발시 다크모드 비활성화 설정 추가하기
그렇죠 iOS에 다크모드 기능이 새로 나왔는데요 기존 다크모드에 대응하지 않은 앱들에 대해서는 기본적으로 다크모드가 비활성화 상태이어야하지 않나 라는 예상은 빗나갔습니다. 그래서 다크모드가 지원되지 않는 앱은 다크모드에서 생각보다 더 최악으로 나오는 경우도 많습니다. 글자색과 배경색이 합쳐져서 글자색이 잘 안보이거나 그렇게말이죠 강제로 어떻게든 다크모드를 적용하게 하려고 하는 의도인지 알수가 없군요 여튼 아이폰 앱에 다크모드를 아직 대응안했을때 임시방편으로 다크모드에 영향을 받지 않도록 설정을 추가할수 있습니다. info.plist 파일에 다음과 같이 추가하시면 됩니다추천