개발/안드로이드12 [안드로이드] Retrofit은 어떻게 동작할까? 안녕하세요. 이번 포스팅은 안드로이드의 Retrofit Library의 동작 방식에 대한 분석을 이야기해 보려고 합니다. Retrofit을 사용할때 가끔씩 어떻게 인터페이스를 정의한것만으로 네트워크 통신이 가능하지? 라는 생각을 했습니다. 그래서 라이브러리를 분석하는 중 InvocationHandler와 newProxyInstance 를 보고 Dynamic Proxy 패턴에 대해 알게 되고 이것이 Retrofit을 동작하는데 중요한 역할을 한다는 것을 알게 되었습니다. 일단 Retrofit의 동작원리를 이해하기 전 Dynamic Proxy 패턴에 대해 이해가 필요합니다. 잘 이해가 안가시면 아래 글을 참고해주세여! https://dog-footprint.tistory.com/94 [자바 디자인패턴] 5... 2023. 2. 12. 안드로이드 Annotation을 이용한 코드 생성(2) 안녕하세요. 지난 포스팅에 이어서 이번에는 Annotation을 이용한 코드생성을 진행해보겠습니다. 혹시나 안보셧다면 먼저 보고 이 글을 읽으시길 바랍니다. https://dog-footprint.tistory.com/49 안드로이드 Annotation을 이용한 코드 생성(1) 안녕하세요. 이번 포스팅에서는 Annotation을 이용한 코드 생성하는 방법을 알려드리겠습니다. 이전에 어노테이션과 관련된 포스팅을 한적이 있었는데 이것에 대한 연장선이라고 생각하시면 되겠 dog-footprint.tistory.com 일단 코드 생성을 위해선 몇가지 개념을 알아야 합니다. FileSpec : 코드생성 파일을 정의하는 클래스 TypeSpec : 파일생성시 어떤 타입의 파일을 정의하는 지에 대한 클래스(예를 들면 .. 2021. 8. 8. 안드로이드 Annotation을 이용한 코드 생성(1) 안녕하세요. 이번 포스팅에서는 Annotation을 이용한 코드 생성하는 방법을 알려드리겠습니다. 이전에 어노테이션과 관련된 포스팅을 한적이 있었는데 이것에 대한 연장선이라고 생각하시면 되겠습니다. https://dog-footprint.tistory.com/43 자바 어노테이션(2) - 리플렉션 안녕하세요. 이번 포스팅에서는 어노테이션이 리플렉션을 통해 어떻게 사용될 수 있는지 적어보려고 합니다. 리플렉션이란 클래스의 정보를 알아내는 것인데 런타임에 동적으로 클래스 정보를 dog-footprint.tistory.com 일단 안드로이드에서 코드 생성을 하기 위한 기본적인 구조로는 processor 모듈과 annotation 모듈을 생성해야 합니다. processor 모듈은 annotation에 대한 코드.. 2021. 8. 2. 안드로이드 include, merge, viewstub 안녕하세요. 이번 포스팅에서는 안드로이드에서 뷰의 성능 개선을 위한 3가지 태그를 설명 드리려고 합니다. 우리가 일반적으로 xml에 레이아웃을 정의하면 똑같은 뷰를 여러번 정의하거나 쓸까 말까한 뷰도 생성되게 정의하거나 또는 레이아웃의 깊이가 깊어져 성능이 안좋아 지는 경우가 있습니다. 이를 개선하기 위해 사용되는 것이 위 3개의 태그입니다. 첫째로 같은 레이아웃을 여러번 그릴 때 태그로 이를 개선할 수 있습니다. 를 사용하면 하나의 레이아웃을 정의함으로써 동일한 레이아웃을 여러번 정의할 수 있기 때문에 굉장히 편리한 태그입니다. 우선 include할 layout 파일을 만든 후 이를 으로 감싼다음 android:layout = "@layout/include_appbar" 를 정의하여 사용할 수 있습니다.. 2021. 7. 8. 안드로이드 뷰가 그려지는 과정 안녕하세요. 이번 포스팅에서는 안드로이드에서 뷰가 그려지는 과정에 대해 포스팅해보겠습니다. 액티비티가 포커스를 얻게 될때 레이아웃을 그리게 요청하는데요. 뷰가 그려지는 건 레이아웃 트리의 루트노드 부터 시작하게 됩니다. 레이아웃 트리는 말그대로 레이아웃에 있는 뷰그룹이나 뷰들을 트리형태로 나타난건데 예를 들면 이런 구조로 되어 있다면 이를 오른쪽 처럼 전위순회 하면서 그려지는 방식입니다. 레이아웃을 그리는 과정은 측정패스(Measure Pass)와 레이아웃패스(Layout Pass)의 가 있습니다. Measure Pass는 onMeasure 메소드를 호출하는데 뷰의 크기를 결정하기 위한 메소드 입니다. Layout Pass는 onLayout메소드를 호출하는데 뷰의 위치를 결정하기 위해 호출되는 메소드 입.. 2021. 6. 9. 안드로이드 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. 이전 1 2 다음