본문 바로가기

Android8

[안드로이드] Retrofit은 어떻게 동작할까? 안녕하세요. 이번 포스팅은 안드로이드의 Retrofit Library의 동작 방식에 대한 분석을 이야기해 보려고 합니다. Retrofit을 사용할때 가끔씩 어떻게 인터페이스를 정의한것만으로 네트워크 통신이 가능하지? 라는 생각을 했습니다. 그래서 라이브러리를 분석하는 중 InvocationHandler와 newProxyInstance 를 보고 Dynamic Proxy 패턴에 대해 알게 되고 이것이 Retrofit을 동작하는데 중요한 역할을 한다는 것을 알게 되었습니다. 일단 Retrofit의 동작원리를 이해하기 전 Dynamic Proxy 패턴에 대해 이해가 필요합니다. 잘 이해가 안가시면 아래 글을 참고해주세여! https://dog-footprint.tistory.com/94 [자바 디자인패턴] 5... 2023. 2. 12.
코틀린 Sealed Class와 Enum Class 안녕하세요. 이번 포스팅에서는 Sealed Class와 Enum Class의 차이 및 Sealed Class의 사용에 대해 적어보려고 합니다. Enum Class는 열거형이라고도 부르며 각 서브클래스들이 상수화된 클래스들입니다. 즉 각 서브클래스들이 고정적인 형태를 지니게 됩니다. 아래 코드처럼 Animal 이라는 Enum 클래스에 Dog, Cat, Pig라는 서브클래스들이 존재합니다. 그리고 이 클래스들은 name을 가지게 되는데 이는 정적인 형태로 항상 같은 값을 가지게 됩니다. enum class Animal(name: String) { Dod("dog"), Cat("cat"), Pig("pig"); } Enum 클래스를 사용하면 가독성이 좋아지고 명확하게 알고 있는 상수형이 있을 때 사용하기 편합.. 2021. 7. 1.
안드로이드 LiveData setValue 와 postValue 안녕하세요. 이번 포스팅은 LiveData에 값을 설정하는 2가지 메소드에 대해 알아보겠습니다. setValue는 기본적으로 MainThread에서 실행된다는 걸 전제로 하여 사용하는 메소드입니다. document를 보면 @MainThread protected void setValue(T value) { assertMainThread("setValue"); mVersion++; mData = value; dispatchingValue(null); } assertMainThread() 메소드에서 MainThread가 아닐때 바로 에러를 발생하게 됩니다. 반면에 postValue는 MainThread가 아닌 WorkerThread에서도 값을 반영 할 수 있게 되어있습니다. 그래서 MainThread가 아닌 .. 2021. 5. 13.
안드로이드 구글STT에서 Recording이 안되는 이유 안녕하세요. 이번 포스팅은 구글STT를 실행하면서 Recording하는 방법을 알려드리고 싶지만 현재 기술적으로 불가능해서 왜 안되는지에 대한 이유를 알려드리기 위해 적게 되었습니다. 구글STT는 Recording한 데이터를 가지고 서버에 보내서 해당 결과값을 받아 처리하게 되어있습니다. 이 과정에서 마이크 채널을 구글 STT가 점유하게 되는데 우리가 Recording을 하기 위해 AudioRecord나 MediaRecord를 쓸때도 마이크 채널을 씁니다. 즉 2개의 앱에서 마이크 채널을 사용하기 때문에 먼저 실행된 앱이 먼저 점유권을 가지에 되어 한쪽은 실행되고 다른 한쪽은 실행이 안되는 것입니다. 입력 공유에 대한 내용은 아래 사이트에서 확인하실 수 있습니다. developer.android.com/.. 2021. 4. 26.
Android MVVM Example 프로젝트 안녕하세요. 오랜만에 글을 쓰게 되었습니다! 첫 직장을 1년동안 다니다 얼마전 퇴사하고 다시 블로그에 글을 쓰게 되었네요ㅎㅎ 안드로이드에서 MVVM에 대한 예시가 많은데 모양이 조금씩 다릅니다. 이번 포스팅에서는 제가 MVVM을 기반으로 한 프로젝트를 소개하려 합니다. 서버통신과 로컬디비를 기반으로 프로젝트를 구현했고 BindingAdapter를 이용해 뷰와의 디펜던시를 없앴습니다. 코드는 깃허브에 올려놓았습니다. github.com/ckdrb7017/MVVMDemo ckdrb7017/MVVMDemo Contribute to ckdrb7017/MVVMDemo development by creating an account on GitHub. github.com 2021. 4. 1.
안드로이드 MVVM에 GraphQL 적용하기(2/2) 지난 포스팅에서는 Dependency Injection을 진행하고 GraphQL에서 사용되는 DAO 파일을 만들어 보았습니다. 확장자이름이 graphql 로 만들면 어떻게 DAO파일이 생성되는지 궁금해 하실수 있을텐데요. 빌드시 자동으로 graphql파일명과 관련된 클래스 파일이 생성됩니다. 프로젝트폴더에서 보시면 지정한 타입이 접미사로 붙고(query, mutation, subscription) 클래스파일이 만들어진것을 확인할 수 있습니다. 이제 repository를 세팅하겠습니다. 튜토리얼에서는 크게 3가지의 통신(Get-query, Post-mutation, WebSocket-subscription) 을 보여주는데 저는 아이템 리스트를 가져오는 메소드만 설명드리겠습니다. 우선 repository 생.. 2020. 7. 19.