본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
21장. 안드로이드 UI 프로그래밍
21.3. 조금 더 코틀린답게 - Kotlin Android Extension
앞에서 간단하게 화면을 제어하는 코틀린 프로그램을 작성했습니다. 그런데 이번에는 조금 더 코틀린답게 작성해 보겠습니다. "코틀린답다"라는 이야기는 코틀린에서 제공하는 다양한 기법을 이용하여 조금더 쉽게 또는 짧게 작성하는 것을 의미합니다. 이곳에서는 Kotlin Android Extension 기능을 살펴보겠습니다.
코틀린에서는 안드로이드 앱을 개발할 때 유용하게 사용할 수 있는 Kotlin Android Extension을 제공합니다. 안드로이드는 UI를 구성할 때 대부분 레이아웃 XML 파일을 이용합니다. 그런데 레이아웃 XML 파일에 등록된 View를 findViewById( ) 함수로 얻어서 사용해야 합니다. 사실 이 작업은 어렵지 않지만 상당히 귀찮은 작업이지요.
액티비티에서 findViewById( ) 함수를 이용하지 않고 쉽게 레이아웃 XML 파일에 등록된 View 객체를 사용할 수는 없을까? 이를 지원하고자 자바로 안드로이드 앱을 개발할 때는 butterknife 등의 라이브러리를 이용했습니다. 그런데 코틀린에서는 이 부분을 공식적으로 지원합니다. 바로 Kotlin AndroidExtension입니다. 즉, findViewById( ) 함수를 사용하지 않고 레이아웃 XML 파일에 등록된 View 객체를 코틀린 코드에서 쉽게 사용하기 위한 기법입니다.
Kotlin Android Extension은 확장 플러그인 형태로 제공하므로 이 기능을 사용하려면 그레이들 파일에 설정되어 있어야 합니다. 물론 프로젝트를 코틀린 환경으로 만들었다면 개발자가 추가하지 않아도 자동으로 모듈의 build.gradle 파일에 추가되어 있습니다.
01 apply plugin: 'com.android.application'
02 apply plugin: 'kotlin-android'
03 apply plugin: 'kotlin-android-extensions'
Kotlin Android Extension을 사용하려면 모듈의 그레이들 파일에 apply plugin: 'kotlinandroid-extensions'이 정의되어 있어야 합니다. 그리고 코틀린 코드에서 다음처럼 import 구문에 명시해주면 됩니다.
import kotlinx.android.synthetic.main.activity_main.*
import의 패턴은 import kotlinx.android.synthetic.main.<layout>.*이며 여기서 <layout>은 레이아웃 XML 파일의 이름입니다. 만약 레이아웃 XML 파일명이 activity_main.xml 파일이라면 import 를 import kotlinx.android.synthetic.main.activity_main.*로 지정하게 됩니다.
이렇게 import하면 별도로 findViewById( ) 함수를 사용하지 않아도 View 객체를 바로 이용할 수 있습니다. 참고로 kotlinx.android.synthetic.main.activity_main.*에서 main은 sourceSetName이 며 안드로이드의 경우 기본으로 main 폴더에 소스가 만들어지므로 그 폴더명이 지정된 것입니다. 만약 개발자가 프로젝트에서 소스의 폴더를 main, free 등으로 다양화했다면 main이라는 단어가 free가 될 수도 있습니다.
'Kotlin' 카테고리의 다른 글
[깡샘의 코틀린 프로그래밍] 정리 23 - SQLiteOpenHelper (0) | 2018.03.02 |
---|---|
[깡샘의 코틀린 프로그래밍] 정리 22 - RelativeLayout (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 20 - MainActivity.kt (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 19 - SAM (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 18 - 리플렉션 (0) | 2018.03.02 |