최근 포스트

[Kotlin] Annotation 생성 및 활용 방법

6 분 소요

보통 어떤 기능을 만들기 위해 클래스나 인터페이스를 생성하고, 프로퍼티와 함수를 구현하고 이용합니다. 이렇게 생성된 클래스의 프로퍼티나 함수를 이용하여 캡슐화된 특정 기능을 호출 및 참조할 수 있습니다.

[Kotlin] Coroutine - 예외처리

16 분 소요

코루틴을 생성하기 위해서는 간단하게 Coroutine Builder 함수인 launch() 와 async() 를 이용하여 새로운 코루틴을 생성할 수 있습니다. 코루틴 빌더는 CoroutineScope 의 확장함수로써 기본적으로 상위 CoroutineScope 의 CoroutineC...

[Kotlin] 동시성 문제와 해결방법

10 분 소요

소프트웨어를 개발하는 데 있어서, 성능을 높이기 위해 가장 흔하게 사용할 수 있는 방법은 병렬로 실행하는 것 입니다. 병렬 실행은 하드웨어의 특성을 이용하여 성능을 높이는 가장 좋은 방법이지만, 병렬로 여러 프로세스나 스레드에서 같은 데이터를 접근하여 읽고 쓰는 과정이 수행될 때,...

[Compose] Compose Compiler

15 분 소요

최근들어 Compose 를 UI toolkit 으로 많이 사용하고 있습니다. 저 역시 마찬가지로 기존의 xml 기반의 뷰 작업들을 모두 Compose 로 migration 한 뒤로, 새로운 기능을 개발할 때 Compose 로 개발하고 있습니다. Compose 를 사용하고는 있지만...

[Kotlin] Generic - 제네릭과 타입안정성

11 분 소요

프로젝트를 진행하면서 코드의 재사용을 위해 제네릭 함수를 사용하거나, Collection 과 같은 제네릭 클래스들을 빌트인 자료구조로 편하게 사용하곤 합니다. 이때까지 제네릭은 객체지향 프로그래밍에서 고급 기법으로 학부시절에도 그 이론을 이해하기가 너무 어려웠습니다. 그래서 관련 ...

의존성 주입에 대한 고찰

3 분 소요

안드로이드 앱 개발 프로젝트들을 살펴보면, 대부분 DI 관련 프레임워크로 Dagger 기반이면서 안드로이드 Jetpack 으로 제공되는 Hilt 나 Koin 등을 사용하는 것을 볼 수 있었습니다. 저의 프로젝트에 Hilt 를 적용하면서 DI 에 대해 자세히 알지 못했던 부분들을 새...

[Kotlin] Coroutine : Flow

5 분 소요

코루틴의 플로우는 어원인 흐름에서 유추 가능하듯이 물이 흐르는 파이프나 시냇물 처럼 데이터가 흐르는 통로를 말합니다. 플로우 이전에 Kotlin.Coroutine 에서는 코루틴간에 통신을 위해서 Channel 을 제공하고 있었습니다. 채널은 생산자와 소비자가 있고 생산자가 데이터를...

[Kotlin] Coroutine : Suspend 살펴보기

5 분 소요

Jetsbrains 의 Kotlinx.Coroutines 는 비동기 작업을 쉽게 동기로 작성하고 실행할 수 있는 기능을 제공하는 라이브러리 입니다. Coroutine 의 핵심인 Suspend 키워드는 Kotlin Compiler 가 compile time 에 특정 코드를 생성 및 ...

[Android] 상태 관리 #3 Compose의 상태관리

18 분 소요

상태관리#2에 이어서 다음으로는 Compose에서 상태관리가 어떻게 지원되고 있는지 에 대해서 공부한 내용을 정리해 보도록 해보겠습니다.

[Android] 상태 관리 #1 AAC-ViewModel

12 분 소요

앱에서 사용자가 화면영역에서 선택하고 보여졌던 상태들은 안드로이드 lifecycle의 변화에 따라 언제든지 사라질 수 있고, 그에 대한 대응을 해주는 것은 사용자 경험 측면에서 중요하다.

[Android] View #2 Compose UI

6 분 소요

Android View #1에 이어서 Compose Layout은 Activity에서 어떻게 연결되고, 어떻게 생성되고, 사라지기 까지의 lifecycle에 대해서 공부한내용을 정리해보고자 한다.

[Android] View #1 Android UI

7 분 소요

최근에 ‘만보기’ 앱을 만들면서 기간(년/월/주/일)에 따라 걸음수를 차트형태로 보여주는 커스텀뷰를 만들어야 할 필요가 있었다.