# Table of Contents

# Jetpack

Jetpack은 더 좋은 품질의 안드로이드 개발을 돕는 라이브러리의 집합입니다.

Jetpack은 크게 네 가지 카테고리로 분류됩니다.

  • Architecture Component
  • UI Component
  • Foundation Component
  • Behavior Component

이번 포스트에서는 Lifecycle OwnerLifecycle-aware Component에 대해 알아보겠습니다.

# Lifecycle

Activity, Fragment 등 대부분의 안드로이드 컴포넌트들은 생명주기(Lifecycle)을 가지고 있습니다. 또한 컴포넌트가 생성되거나 화면에 보이거나 화면에서 사라질 때 사전에 정의된 생명주기 함수(Lifecycle Method)를 호출합니다.

# Lifecycle Owner

Activity, Fragment 등 대부분의 안드로이드 컴포넌트들은 LifecycleOwner클래스를 구현하고 있습니다.

open class AppCompatActivity: ... , LifeCycleOwner {
    ...
}
open class Fragment: ... , LifeCycleOwner {
    ...
}

LifecycleOwner클래스에는 getLifeCycle()메소드가 정의되어있습니다. 이 메소드를 호출하여 해당 컴포넌트의 LifeCycle에 접근할 수 있습니다.

class LifeCycleOwner {
    ...
    LifeCycle getLifeCycle()
}

# Lifecycle-aware Compoent

Lifecycle-aware Compoent (opens new window)를 사용하면 Lifecycle의 상태 변화를 탐지할 수 있습니다. Lifecycle-aware Compoent를 사용하려면 모듈 수준의 build.gradle에 의존성을 추가해야합니다.

// 모듈 수준의 build.gradle
apply plugin: 'kotlin-kapt'

dependencies {
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
    kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
}

그 다음 LifecycleObserver클래스를 구현하는 클래스를 정의합니다. 생명주기가 변할 때 마다 결과를 출력하는 커스텀 로그를 정의해봅시다.

// CustomLogger.kt
class CustomLogger : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onCreate() {
        println("onCreate")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy() {
        println("onDestory")
    }
}

이제 LifeCycleOwner를 구현하는 클래스에서 lifecycle속성과 addObserver()메소드를 통해 Observer를 등록할 수 있습니다.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Observer 등록
        lifecycle.addObserver(CustomLogger())
    }

    override fun onDestroy() {
        super.onDestroy()
        // Observer 해제
        lifecycle.removeObserver(CustomLogger())
    }
}