[Kotlin] Coroutine - 코루틴의 내부 구현

코루틴은 디컴파일되면 일반 코드일 뿐이다. Continuation Passing Style(CPS, 연속 전달 방식) 이라는 형태로 동작하며, 결과를 호출자에게 직접 반환하는 대신 Continuation으로 결과를 전달한다. Continuation이라는 객체가 있고, 매 번 함수를 호출할 때마다 continuation을 넘겨준다. continuation은 Callback 인터페이스 같은 것으로, 재개를 해주는 인터페이스를 가진 객체인 것이다.
자세히 보기

[Android] CustomView & Touch Event

안드로이드는 뛰어난 기능의 표준 뷰와 위젯을 많이 제공한다. 그러나 때로는 앱 특유의 비주얼을 보여주는 커스텀(custom)가 필요하다. 커스텀 뷰를 생성하려면 다음의 세 단계를 거친다.
 ➀ 슈퍼 클래스를 선택한다. 단순 커스텀 뷰에선 View, 복합 커스텀 뷰에선 FrameLayout과 같이 적합한 레이아웃 클래스를 선택한다.
 ➁ 1번에서 선택한 슈퍼 클래스의 서브 클래스를 만들고, 해당 슈퍼 클래스의 생성자를 오버라이드한다.
 ➂ 슈퍼 클래스의 주요 함수들을 오버라이드해 커스터마이징한다.
자세히 보기

[Android] 단위 테스트와 오디오 재생

단위 테스트(unit testing)는 하나의 컴포넌트(주로 클래스) 자체를 테스트하는 것이므로 작성할 수 있는 가장 작은 종류의 테스트다. 그리고 테스트를 실행하고자 전체 앱이나 장치를 사용할 필요가 없으며, 테스트를 여러 번 실행해도 충분할 만큼 빠르게 실행된다. 따라서 하나의 컴포넌트르 테스트할 때 장치 테스트로 실행하는 경우는 거의 없다. 단위 테스트는 안드로이드 런타임이 아닌 로컬 컴퓨터의 JVM(Java Virtual Machine)에서 실행되므로 빠르게 이루어진다.
자세히 보기

[Kotlin] Coroutine - Cancellation and Timeouts

코루틴이 취소되기 위해서 협조적인 방식을 취하는데 크게 2가지 방법이 있다. 첫 번째, 주기적으로 suspend function을 호출하기 (suspend 되었다가 다시 재개될 때 cancel 되었는지를 확인해서 Exception을 던져주는 방식). 두 번째, 명시적으로 취소 상태를 확인하기 (isActive 상태를 확인하여 false일 때 해당 코루틴을 종료시키는 방식)
자세히 보기

[Kotlin] Coroutine - Basics

코루틴 Coroutine은 비동기 콜백 처리를 순차적인 코드로 작성할 수 있게 해주는 코틀린 기능이자, 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴(concurrency design pattern)이다.
자세히 보기

[Android] 데이터 바인딩과 MVVM

안드로이드의 데이터 바인딩 data binding 은 Android Jetpack 라이브러리 중 하나로 UI 구성요소와 데이터를 프로그램적 방식으로 연결하지 않고, 선언적 형식으로 결합할 수 있게 해주는 지원 라이브러리를 말한다. 간단하게 말하면 XML파일에 data를 연결 binding해서 사용하는 것을 의미한다.
자세히 보기

[Android] 암시적 인텐트를 이용한 촬영 및 저장

암시적 인텐트를 사용해 사용자의 카메라 앱을 실행시켜서 사진을 찍고, 데이터에 추가로 저장하고 사용해보도록 한다. 사진을 어디에 저장하고 저장된 사진을 어떻게 보여주어야 할지도 본문에서 알아보도록 한다. 이를 위해 Context 클래스의 파일과 디렉터리 함수, File Provider, Bitmap 등의 개념도 함께 알아본다.
자세히 보기

[Android] 암시적 인텐트

안드로이드에서는 인텐트 intent 를 사용해 장치의 다른 앱에 있는 액티비티를 시작시킬 수 있다. 명시적 인텐트 explicit intent 에서는 시작시킬 액티비티 클래스를 지정하면 안드로이드 운영체제가 해당 액티비티를 시작시킨다. 반면에 암시적 인텐트 implicit intent 에서는 해야 할 작업을 알려주면 안드로이드 운영체제가 이 작업을 수행하는 데 적합한 앱의 액티비티를 찾아서 시작시킨다.
자세히 보기