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 이상 버전 권장