← 글 목록

notes

Android - Android KTX , fragment-ktx

Android KTX·fragment-ktx 확장 함수와 Fragment 개발 편의 기능 메모.


Android KTX (Kotlin Extensions)

개요

  • Android 개발을 위한 Kotlin 확장 라이브러리
  • Kotlin의 언어 기능을 활용하여 Android API를 더 간결하고 자연스럽게 사용할 수 있게 해줌
  • Android 프레임워크의 Java API를 Kotlin 스타일로 래핑

주요 기능

  • 코드 간소화
    // 기존 Java 스타일
    textView.setText("Hello")
    textView.getText()
    
    // KTX 사용
    textView.text = "Hello"
    textView.text
    
  • Null 안전성
    // 기존 Java 스타일
    if (textView != null) {
        textView.setText("Hello")
    }
    
    // KTX 사용
    textView?.text = "Hello"
    
  • 람다 표현식 지원
    // 기존 Java 스타일
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 처리
        }
    });
    
    // KTX 사용
    view.setOnClickListener {
        // 처리
    }
    

주요 모듈

  • core-ktx: 기본 Android 프레임워크 확장
  • fragment-ktx: Fragment 관련 확장
  • lifecycle-ktx: Lifecycle 관련 확장
  • viewmodel-ktx: ViewModel 관련 확장

fragment-ktx

개요

  • Fragment 개발을 위한 Kotlin 확장 라이브러리
  • Fragment 관련 API를 Kotlin 스타일로 사용할 수 있게 해줌
  • FragmentManager와 FragmentTransaction 작업을 간소화

주요 기능

  • Fragment 생성 간소화
    // 기존 Java 스타일
    val fragment = MyFragment.newInstance(param1, param2)
    
    // fragment-ktx 사용
    val fragment = MyFragment().apply {
        arguments = bundleOf(
            "param1" to value1,
            "param2" to value2
        )
    }
    
  • FragmentTransaction 간소화
    // 기존 Java 스타일
    supportFragmentManager.beginTransaction()
        .add(R.id.container, fragment)
        .addToBackStack(null)
        .commit()
    
    // fragment-ktx 사용
    supportFragmentManager.commit {
        add(R.id.container, fragment)
        addToBackStack(null)
    }
    
  • ViewModel 생성 간소화
    // 기존 Java 스타일
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // fragment-ktx 사용
    val viewModel: MyViewModel by viewModels()
    
  • SharedViewModel 사용
    // fragment-ktx 사용
    val sharedViewModel: SharedViewModel by activityViewModels()
    

주요 확장 함수

  • FragmentManager 확장
    // Fragment 찾기
    val fragment = supportFragmentManager.findFragmentById(R.id.container)
    
    // Fragment 추가
    supportFragmentManager.commit {
        add(R.id.container, fragment)
        setReorderingAllowed(true)
    }
    
  • Fragment 확장
    // ViewModel 생성
    val viewModel: MyViewModel by viewModels()
    
    // SharedViewModel 생성
    val sharedViewModel: SharedViewModel by activityViewModels()
    
    // Fragment 결과 처리
    setFragmentResult("requestKey", bundleOf("result" to "data"))
    
  • Bundle 생성
    val bundle = bundleOf(
        "key1" to "value1",
        "key2" to 123,
        "key3" to true
    )
    

사용 이점

  • 코드 간소화: 보일러플레이트 코드 감소
  • Null 안전성: Kotlin의 null 안전성 지원
  • 가독성 향상: 더 자연스러운 Kotlin 스타일 코드
  • 생산성 향상: 개발 속도 향상

의존성 추가

dependencies {
    implementation "androidx.fragment:fragment-ktx:1.6.2"
}

주의사항

  • Kotlin 1.4 이상 버전 필요
  • AndroidX 사용 필수
  • Fragment 1.3.0 이상 버전 권장