본문 바로가기

Android/Tech

(52)
@Retention 은 어떻게 동작하는가? 동기 DND 8기에 참여하여 프로젝트를 진행했을 때, 팀 동료분께서 먼저 앱 구조를 구축해주셨습니다. 그 때 궁금했던 것이 @Retention Annotation 입니다. CoroutineDispatcher 여러에 대해 서로 다른 Annotation 을 붙여주셔서, 어떤 기준으로 결정하신 건지 여쭤봤었는데 속 시원한 답변을 구하지 못했던 기억이 납니다. 문득 궁금해져, 이번 기회에 이에 관해 학습하고 정리하려 합니다. Hilt 사용 시 사용되는 Annotation 에 관해서는 이미 정리해 둔 포스팅이 있습니다. 심지어 이번 포스팅에서 다룰 @Retention 에 관해서도 간략하게 작성했습니다. [Dagger-Hilt] Dagger-Hilt 의 대표적인 Annotations Dependency Inject..
Kapt, 그리고 KSP GDG Korea 슬랙 채널에서 Dagger 가 KSP 를 지원한다는 소식을 보았고, Kapt 와 KSP 에 대해 제대로 알아보고 정리하고 싶어 포스팅합니다. Kapt Kapt(Kotlin Annotation Processing Tool) 은 어노테이션 프로세싱을 지원하기 위한 Kotlin Compiler Plugin 이며, Java 의 apt(Annotation Processing Tool) 과 유사한 기능을 제공합니다. Kotlin 1.0.5 까지는 Annotation Processing 을 위해 apt 를 사용하였으나, Kotlin 이 널리 사용되기 시작하면서 그다음 버전인 Kotlin 1.0.6 부터는 Kapt 가 제공되었습니다. 특징 호환성 Kapt 는 apt 와 호환 가능합니다. 그러므로, 큰..
내부 리소스 접근에 왜 Context 가 필요한 걸까? 안드로이드 프로그래밍을 하다 보면, 시간의 흐름이나 사용자 액션에 따라 내부의 특정한 리소스에 접근해야 하는 경우가 왕왕 있습니다. 대체로 꼭 Context 를 요구하는데, 문득 이에 대한 이유가 궁금했습니다. Android Context Details (feat.LocalContext) Context 안드로이드 프로그래밍에 필수불가결한 존재인 Context 는 정말 자주 사용됩니다. 그 경우의 수가 어마무시하게 많은데, 그렇게 자주 사용하고 있으면서도, 'Context 가 정확히 뭐야?' 라는 얘 blothhundr.tistory.com Context 에 대한 간단한 개요에 대해서는 위 포스팅에서 확인하실 수 있습니다. 덤으로 다양한 정보도 함께 작성하였으니, 참고하셔도 좋을 것 같습니다. 해당 포스트..
HLS, DASH, 그리고 오디오 포맷 (feat.속도 비교) 역할 웹 서비스나 앱 서비스의 역할은 유저가 원하는 데이터를 가공하여 보여주는 것이라고 생각합니다. 백엔드 개발자들은 '데이터를 가공' 하는 것에 대한 책임을 지고, 디자이너와 프론트엔드 개발자(또는 앱 개발자)들은 '보여주는 것' 에 대한 책임을 집니다. 이와 같이 단순하지만 확실한 역할 구분은 각자가 숙지하고 있어야 할 (또는 그러하면 좋을) 지식들을 정립하고 일반화하기 좋게 합니다. 저는 앱 개발자이므로, 인터랙션과 관련한 애니메이션, 또는 이미지 처리, 오디오, 비디오 처리등이 그러한 지식에 속할 수 있다고 생각합니다. 해당 포스트에서는 오디오 처리에 대해 학습한 것을 기록하려 합니다. 학습하게 된 동기는 작은 프로젝트에서 생겨났습니다. 친한 백엔드 개발자 한 분과 단 둘이서 이라는 앱을 개발하고..
Android Context Details (feat.LocalContext) Context 안드로이드 프로그래밍에 필수불가결한 존재인 Context 는 정말 자주 사용됩니다. 그 경우의 수가 어마무시하게 많은데, 그렇게 자주 사용하고 있으면서도, 'Context 가 정확히 뭐야?' 라는 얘기를 들으면 머릿속이 새하얘집니다. 전부를 알 수는 없겠지만, 조금이라도 알고 쓰자라는 마인드로 조금 알아봅니다. 1. What 'Context' truly is? 보통 '문맥' 이라는 의미를 사용하고자 할 때 Context 라는 단어를 씁니다. 조금 더 일상생활과 가까운 의미로는 '분위기', '맥락', (일이나 사건 등의) '정황' 이라는 의미를 위해 사용합니다. 안드로이드에서의 Context 는 현재 애플리케이션 실행 환경에 대한 정보를 제공하는 개념입니다. 기기 및 애플리케이션에 대한 정보..
StateMachine 과 Stackless Coroutine Coroutine Coroutine(코루틴) 은 비선점형 멀티태스킹 솔루션입니다. 동시성 프로그래밍을 구현하기 위한 기법으로, Kotlin 은 언어차원에서 제공합니다. 코루틴에 관한 설명은 다음 포스트에 자세히 기록해두었습니다. 그린 스레드와의 비교는 덤이구요! 코루틴과 그린 스레드 Coroutine 코루틴은 작업 수행을 일시 정지 및 재개될 수 있도록 하는 프로그래밍 구성요소입니다. 코루틴은 서브루틴을 일반화합니다. 협력 작업, 예외, 이벤트 루프, 반복자, 무한 목록 및 파이프 blothhundr.tistory.com 코루틴 작동 원리 위는 코루틴의 작동 원리를 가장 간결하게 표현하는 이미지입니다. Routine 은 일반적으로 하나의 태스크, 함수를 의미하고, 접두사 Co- 는 '협력' 또는 '함께'..
[Dagger-Hilt] Dagger-Hilt 의 대표적인 Annotations Dependency Injection 의존성 주입(Dependency Injection, DI)은 안드로이드 앱 아키텍처 및 클린 아키텍처 적용시 필수적으로 사용되어야 하는 기술입니다. 대부분의 아키텍처가 테스트 용이성에 포커스를 두기 때문입니다. 다만 구현하기가 쉽지 않습니다. 수많은 패턴에 대해 학습하고 이를 적재적소에 사용하여야 하며, 이러한 과정은 수많은 보일러 플레이트 코드를 양산할 수 밖에 없습니다. 메이저 기술의 구현 과정이 쉽지 않다면, 보통 라이브러리가 존재합니다. 안드로이드 진영에는 꽤 많은 DI 라이브러리가 존재하는데, 그 중 Dagger-Hilt 는 Jetpack Library 로 채택되어 있으며, 수많은 안드로이드 개발자들에게 꾸준한 사랑을 받고 있습니다. Dagger-Hilt 작..
나의 MVI 적용기 Architecture 에 대한 끝없는 고민 아키텍처는 프로그램 개발에서 굉장히 중요한 요소들 중 하나입니다. 어쩌면 가장 중요하다고 얘기할 수도 있을 것 같습니다. 제가 처음 접한 프로덕트에는 이렇다 할 아키텍처가 없었습니다. (물론 지금도 해당 프로덕트에는 아무런 아키텍처도 적용되어 있지 않습니다.) 같은 파트 동료분께 처음 해당 프로덕트에 대한 인계 및 설명을 받았을 때, MVC 아키텍처가 적용되어 있다는 이야기를 들었으나, 전혀 그렇지 않았습니다. MVC 아키텍처가 가장 기본적인 안드로이드 아키텍처이므로, 별도의 아키텍처(MVP, MVVM, MVI 등)가 적용되지 않으면 MVC 아키텍처인 것처럼 알려져 있는데, 이는 잘못된 지식입니다. 구덩이 파고 흙 쌓아 지붕 만든다고 다 집이 아닙니다. MVC..