Looper, MessageQueue, Handler
기본적으로 JVM 프로그램은 main 함수가 끝나는 즉시 애플리케이션이 종료된다. 하지만 안드로이드는 명시적으로 종료를 선언하기 전까지 실행 상태를 유지하는데, 이는 메인 스레드 내에서 끊임없이 돌아가는 Looper 덕분이다. Looper 는 안드로이드 애플리케이션의 실행 상태를 유지하는 것 외에도, 안드로이드의 UI 요소를 안정적으로 그리는 데에도 핵심적…
기본적으로 JVM 프로그램은 main 함수가 끝나는 즉시 애플리케이션이 종료된다. 하지만 안드로이드는 명시적으로 종료를 선언하기 전까지 실행 상태를 유지하는데, 이는 메인 스레드 내에서 끊임없이 돌아가는 Looper 덕분이다. Looper 는 안드로이드 애플리케이션의 실행 상태를 유지하는 것 외에도, 안드로이드의 UI 요소를 안정적으로 그리는 데에도 핵심적…
지난 포스팅 에서는 Binder 가 왜 등장했는지, 어떤 특징이 있는지 알아봤다. 이 과정에서 Binder 가 안드로이드 시스템에서 핵심 역할을 수행한다는 사실도 알 수 있었다. 이제 더 나아가, 이번 포스팅을 시작으로 Binder 가 내부에서 어떻게 동작하는지 상세히 알아볼 것이다. 우선 전체적인 동작 흐름을 가볍게 훑어보고, 본격적인 통신에 앞서 선행되…
앱을 사용하다 보면, 갤러리에서 프로필 사진을 고르거나 카메라로 사진을 찍는 경우가 있다. 사용자 입장에서는 마치 하나의 앱에서 모든 일이 자연스럽게 처리되는 것처럼 보인다. 하지만 실제로는 ‘갤러리’를 담당하는 앱과 ‘카메라’를 담당하는 앱이 서로 다른 프로세스에서 독립적으로 실행되고 있다 . 그렇다면 안드로이드는 어떻게 독립된 앱들을 하나로 이어주는걸까…
코틀린을 주력 언어로 사용하는 개발자라면, 비동기 처리 시에 코루틴을 습관처럼 사용하고 있을 것이다. 복잡한 설정 없이 suspend 키워드만 붙여주면, 함수가 중단되었다가 작업이 완료되는 신기한 비동기 흐름 을 간단하게 만들 수 있기 때문이다. 물론 단순히 suspend 키워드의 역할만 알아도 코루틴을 사용하는 데에는 아무런 문제가 없지만, 어느 순간 이…
프로그램을 개발하며 Collection 을 사용해보지 않은 개발자는 한 명도 없을 것이다. 특히 코틀린 개발자는 어떠한 리스트가 필요할 때 Collection 을 습관적으로 사용하는 경우가 대부분일 것이다. 하지만, 대량의 데이터를 다룰 때에도 Collection 을 사용한다면, 애플리케이션의 성능을 저하시킬 우려가 있다. 코틀린에서는 대량의 데이터를 처리…
벌써 Jetpack Compose 가 스테이징으로 출시된지 2년이 훌쩍 넘어가고 있는 시점입니다. 그 사이 Jetpack Compose 는 불안정했던 초기 버전을 지나 구글의 적극적인 지원으로 안드로이드 생태계에 빠르게 자리를 잡았는데요, 현재는 많은 프로젝트에서 안드로이드 UI 툴킷으로 Jetpack Compose 를 적극적으로 채택하고 있는 추세입니다.…
지난 포스팅 에서는 제네릭의 기초적인 내용들을 알아보았다. 이번 포스팅에서는 한 발 더 나아가 심화적인 내용들을 알아보도록 하자. 제네릭은 기본적으로 불변(invaraint)하다 fun main() { val any: Any = 5 // 업캐스팅 } 위의 코드가 컴파일 오류 없이 잘 동작하는 이유는 무엇일까? 5 라는 값은 기본적으로 Int 타입이다. 그리…
Generic ? 제네릭은 함수에 파라미터를 전달하는 것과 유사하게 타입에 파라미터를 전달 해 컴파일 시에 적합한 타입을 사용할 수 있게 지정하는 것을 의미한다. 이로 인해 타입 안정성을 강화 할 수 있는 것은 물론, 코드 재사용성 을 높이는 효과를 누릴 수 있다. 아래 코드를 보며 제네릭에 대해 가볍게 이해해보자. fun printStringList(li…