달달한 스토리

728x90
반응형

 

회사를 다니니 피곤해서 집에 오면 자고 싶고..

 

그러지만.. 발전을 위해서 계속 초심을 가지고 정진을 해야 할 것이다.

 

아직은 코틀린에 대해서 부족한 것이 많아서,

 

자바를 처음 배웠을 때 마음가짐으로 임하려고 한다.

 

오늘은 findViewById로 항상 id값을 참조하여 자바 코드를 작성하였는데,

 

이제 효율성을 위해 코틀린 코드를 이용해서 뷰 바인딩을 사용해 보려고 한다.

 

사실 자바 코드를 사용할 때, 접해보려 했건만,

 

당시엔 취업이 우선시 했던지라, 그러한 퀄리티는 신경 쓰지 못한 것 같다.

 

우선 다음을 보자.

 


뷰 바인딩

 

https://duckssi.tistory.com/42

 

[Android Kotlin] View Binding ( 뷰 바인딩 )

네 여러분들 안녕하십니까 홍 드로이드 입니다 :) 이번 시간에는 코틀린에서 View Binding ( 뷰 바인딩 )을 하는 방법에 대해서 안내드리도록 하려고 합니다. 우선 뷰 바인딩에 대해서 쉽게 말씀드리

duckssi.tistory.com

홍드로이드님의 강의를 참고했습니다.

 

배워보니 예전에는 Kotlin Extention을 사용하여 뷰에 접근하여

 

손쉽게 참조를 할 수 있었다고 합니다.

 

하지만 위에 코틀린 익스텐션은 2021년 이후에 deprecated 되었다고 합니다.

 

그러므로, 뷰 바인딩을 쓸 수 밖에 없는 상황이 된 것이죠.

 

우선 build.gradle(Module: 프로젝트명)으로 들어가시고,

 

android {
    // 기존 내용들 생략..

    buildFeatures {
        // 뷰 바인딩 활성화
        viewBinding true
    }
}

이런 식으로 아무 곳에다가 넣어주시면 됩니다.

 

그 후 Sync Now 메시지를 눌러주시면, 수정사항이 반영됩니다.

 

이렇게 되면 xml파일에 바인딩 클래스라는 녀석이 생기게 되어

 

파스칼 케이스와 카멜 케이스를 사용하여 

 

xml에 선언했던 id를 참고 할 수 있게 되는 것입니다.

 

파스칼 케이스(파스칼 표기법):PascalCase처럼 첫 단어를 대문자로 시작하는 표기법이다.


멜케이스(카멜 표기법) : ex) camelCase, 단봉낙타 표기법이라고도 부르며,


각 단어의 첫 문자를 대문자로 표기하고 붙여 쓰되,, 맨 처음 문자는 소문자로 표기한다.


띄어쓰기 대신 대문자로 단어를 구부하는 표기 방식이다.

 

 

ex) activity_main.xml --> ActivityMainBinding

 

이런식으로 파스칼 케이스로 바꾸어주면 됩니다.

(변수는 카멜케이스를 사용합니다.)

 

 

이제 코드를 보겠습니다.

 

 

우선 xml입니다.

 

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="수열이가 짱이야."
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

그 다음은 코틀린 코드입니다.

 

코틀린 코드안에 상세 설명을 모두 정리해 두었으니,

 

천천히 읽어보시며 이해하는 게 도움이 될 것입니다.

 

class MainActivity : AppCompatActivity() {

    //전역 변수로 바인딩 객체 선언
    private var mBinding : ActivityMainBinding? = null
    // 물음표의 의미는 널일수도 있고, 널이면 널을 줘라.. 라는 의미이다.(널처리)
    //매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재 선언
    private val binding get() = mBinding!! //!!의 뜻은 널은 아니다 라고 선언해주는 것이다.

    override fun onCreate(savedInstanceState: Bundle?) {//앱이 최초 실행됬을 때 수행한다.
        super.onCreate(savedInstanceState)
        //기존에 setContentView는 지운다.

        //자동 생선된 뷰 바인딩 클래스에서의 inflate라는 메서드를 활용해서
        //액티비티에서 사용할 바인딩 클래스의 인스턴스를 생성한다
        mBinding = ActivityMainBinding.inflate(layoutInflater)

        //getRoot 메서드로 레이어웃 내부의 최상위 위치 뷰의
        // 인스턴스를 활용하여 생성된 뷰를 액티비티에 표시 한다.
        setContentView(binding.root)

        //이제부터 binding 바인딩 변수를 활용하여 마음 껏 xml 파일 내의 뷰 id 접근이 가능해진다.
        //뷰 id도 파스칼케이스 + 카멜케이스의 네이밍규칙 적용으로 인해서 ex) tv_message ->
        // tvMessage 로 자동 변환이 됩니다.
        //파스칼케이스(파스칼표기법): ex) PascalCase 처럼 첫단어를 대문자로 시작하는 표기법이다.
        //카멜케이스(카멜 표기법) : ex) camelCase, 단봉낙타 표기법이라고도 부르며,
        //각 단어의 첫문자를 대문자로 표기하고 붙여쓰되, 맨처음 문자는 소문자로 표기한다.
        //띄어쓰기 대신 대문자로 단어를 구부하는 표기 방식이다.

        binding.textView.setText("셋텍스트를 넣었습니다.")
    }

    //액티비티가 파괴될 때
    override fun onDestroy() {
        //onDestroy에서 binding class 인스턴스 참조를 정리해주어야 한다.
        mBinding = null
        super.onDestroy()
    }
}

액티비티가 파괴될때는 꼭 바인딩의 값을 널을 주어

 

참조를 정리해주는 것이 메모리 효율성에 좋다.

 

편의성을 위해 바인딩 함수도 재정의를 

 

하고, 바인딩으로 인플레이션도 하고,

 

코드도 간소화하여 setContentView도 간결하게 표현하고,

 

간단하게 textView를 굳이 findViewById를 하지 않아도 

 

참조가 가능하게 할 수 있다는 것이다.

 

이렇게 편한 것을 쓰지 않을 수 없다.

 

매번 findViewById에 찌든 사람들은 조금

 

복잡해 보이고, 불편할 수는 있지만,

 

편의를 위해서 얼른 배워 잘 활용하면 좋을 듯하다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading