회사를 다니니 피곤해서 집에 오면 자고 싶고..
그러지만.. 발전을 위해서 계속 초심을 가지고 정진을 해야 할 것이다.
아직은 코틀린에 대해서 부족한 것이 많아서,
자바를 처음 배웠을 때 마음가짐으로 임하려고 한다.
오늘은 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에 찌든 사람들은 조금
복잡해 보이고, 불편할 수는 있지만,
편의를 위해서 얼른 배워 잘 활용하면 좋을 듯하다.
Android Kotlin/ 단말기를 흔들었을때 호출되는 메서드 TIL # 32 (0) | 2021.05.17 |
---|---|
안드로이드 스튜디오 GitHub 오류 / 422 unprocessable entity - repository creation failed. [repository; description]custom: description control characters are not allowed TIL # 31 (0) | 2021.05.16 |
안드로이드 코틀린 / lottie Animation을 이용해 인스타그램 하트기능 만들기/ TIL # 30 (2) | 2021.05.15 |
안드로이드 코틀린 리사이클러뷰 사용법 #TIL 29 (0) | 2021.04.27 |
안드로이드 코틀린 Intent 알아보기 TIL #28 (2) | 2021.04.26 |
안드로이드 코틀린 Button 리스너와 setText 사용하기 TIL # 27 (0) | 2021.04.22 |
안드로이드 코틀린 FCM(FireBase Cloud messaging) 이용해서 알림 보내기 #25 (1) | 2021.04.20 |
#TIL 24 안드로이드 코틀린 뷰페이저2 구현하기 (0) | 2021.04.20 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.