본문 바로가기
Mobile : Android/Android Studio

[Kotlin Plugin] 코틀린 합성 프로퍼티

by 신숭이 2021. 8. 20.

 

이 기술은 deprecated 예정이다. 따라서 쓰지말자.

 

https://full-stack.tistory.com/13

 

[Android Studio] View Binding 정리

[Android Studio] View Binding 정리 핵심 : findViewById 를 쓰지 않는다. 뷰 바인딩은 각 XML 레이아웃 파일에 해당하는 바인딩 클래스(Binding Class)를 자동 생성하여 뷰에 대한 직접 참조를 가능케 한다...

full-stack.tistory.com

이걸 쓰자

 

 

그래도 쓰고 싶을 수도 있는 이상한 사람을 위해 글은 지우지 않겠다.

 

 

코틀린 합성 프로퍼티

 

 

코틀린 확장 플러그인에서 제공하는 매우 간단하게 쓸 수 있고,

 

리팩토링 효과가 탁월한 기능을 소개하고자 한다.

 

XML의 id 값을 Kotlin 코드 내에서 프로퍼티 이름으로 사용할 수 있게 한다. 즉 findViewById를 쓸 필요없다.

 

예제는 간단히 백(Back)버튼으로 액티비티를 종료하는 예시로 들겠다.

 

 

 

준비

 

우선 App 수준 build.gradle 파일에서 플러그인에 'kotlin-android-extensions' 추가.

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'  
}

 

xml 파일에는 이미지뷰 id 에 bt_back 이라는 값을 부여했다.

 <ImageView
        android:id="@+id/bt_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="18dp"
        android:layout_marginStart="15dp"

 

해당 xml 파일을 inflate 하는 액티비티 코틀린 파일에 다음과 같이 import 한다.

 

import kotlinx.android.synthetic.main.{xml 파일명}.*

import kotlinx.android.synthetic.main.activity_blescan.*

 

 

백버튼 구현 비교

 

기존 Java 방식 : 지저분

private ImageView bt_back;

...(중략)

bt_back = (ImageView)findViewById(R.id.bt_back);
bt_back.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
            finish();
       }
});

 

Fancy 한 Java - 람다 이용

private ImageView bt_back;

.. (중략)

bt_back = (ImageView)findViewById(R.id.bt_back);
bt_back.setOnClickListener(v -> finish());

 

기존 Kotlin

private val bt_back by lazy{
     findViewById<ImageView>(R.id.bt_back)
}

.. (중략)

bt_back.setOnClickListener { finish() }

 

Kotlin 확장 프로퍼티 : 단 한줄로 끝

bt_back.setOnClickListener { finish() }

 

 

 

비슷한 기술로 Java 에선 Butter Knife 라는 라이브러리가 있기도하다. 하지만 Java 자체가 Fancy 하지 않다.

댓글