[Android] viewBinding을 설정하고 사용하기

오늘·2022년 2월 5일

MyKotlinMusicPlayer 프로젝트를 위한 공부를 하던 중 처음 써보게 되었다.
기본적이지만 아직 많이 써보지 못해 자주 까먹는 부분이어서 정리를 한 번 하고 가려고 한다.

🤔 viewBinding?

말 그대로 View를 Binding하는 것.
즉, 뷰와 코틀린 코드를 연결시키는 방법이다.

viewBinding 이전에 뷰와 코드를 연결하는 방법은 이랬다.

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
        
        // 바로 이 부분
        setContentView(R.id.activity_main)
    }
}

onCreate 함수 내부에서 setContentView 의 인자로 layout 파일을 직접 넣어주는 것이다.

그 후, Activity에 있는 특정 뷰를 찾을 땐

var textViewName: TextView = findViewById(R.id.text_veiw_name)
textViewName.text = "텍스트"

이처럼 Id를 이용했다.


findViewById 를 효율적으로 이용하기 위해 코틀린 익스텐션이라는 것이 등장했지만, 몇가지 이유 때문에 요즘엔 사용하지 않는 것을 권장한다고 한다.

그래서 이용되는 것이 바로 viewBinding이다.

✔️ viewBinding 사용하기

먼저 build.grade (Module: ...) 파일을 열고, android{} 내부에 아래의 코드를 추가한다.

buildFeatures {
	viewBinding true
}

그 후, 위에서 MainActivity 부분을 아래와 같이 변경한다.

// ActivityMainBinding은 layout 파일명에 따라 바뀜
import 패키지명.databinding.ActivityMainBinding


class MainActivity : AppCompatActivity() {
	// 추가된 부분
	val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
    
    override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
        
        // 변경된 부분
        setContentView(binding.root)
    }
}

이제 이 Activity에서 특정 뷰를 찾을 땐

binding.textViewName.text = "텍스트"

이와 같이 하면 된다.

😮 독특했던 점

viewBinding에서 개인적으로 독특하다고 생각한 부분이 있었다.

  1. 레이아웃 파일 이름에 따라 Binding 이름?이 자동으로 설정되는 것
  2. 스네이크 케이스로 표현된 layout 파일 이름과 id가 저절로 카멜 케이스와 파스칼 케이스로 변환되는 것

1번의 예

  • layout 파일 이름이 item_layout.xml 이라면 Binding 이름은 ItemLayoutBinding 이 되고 또 다른 layout 파일 이름이 activity_play.xml 이라면 Binding 이름은 ActivityPlayBinding 으로 설정된다.

2번의 예

  • 위에서처럼 Binding 이름들은 카멜 케이스로 사용된다.
  • id를 text_view_name 으로 지었다면, binding을 이용해서 찾을 때는 binding.textViewName 처럼 파스칼 케이스로 사용된다.
profile
Junior Mobile 개발자

0개의 댓글