뷰 바인딩 ( View Binding)

Hyeon·2023년 4월 17일
0

Android

목록 보기
2/15

레이아웃에서 생성한 View 는 findViewById() 를 이용해 가져온다. 그런데 하나하나 View 를 가져오는 것은 매우 귀찮은 일이다. 이때 뷰 바인딩을 사용할 수 있다.

뷰 바인딩 (View Binding)이란?

레이아웃 xml 파일에 선언한 View 객체를 코드에서 쉽게 이용하는 방법이다.

뷰 바인딩 사용법

우선, 뷰 바인딩을 사용하려면 gradle 파일에 아래와 같이 선언해야 한다. 이렇게 하면 레이아웃 xml 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다. 즉, findViewById() 함수를 사용하지 않고 자동으로 만들어진 클래스를 이용해 뷰를 사용하면 된다.

android{
	viewBinding{
    	enabled = true
    }
}

자동으로 만들어지는 클래스의 이름은 아래 규칙으로 작성된다.

  • activity_main.xml -> ActivityMainBinding
  • item_main.xml -> ItemMainBiding

클래스의 inflate() 함수를 이용하면 바인딩 객체를 얻을 수 있다. 이때 인자로 layoutInflater를 전달한다. 그리고 바인딩 객체의 root property에는 xml의 루트 태그가 자동으로 등록되므로 액티비티 화면 출력은 setContentView() 함수에 binding.root를 전달하면 된다.


class SongActivity : AppCompatActivity() {

    lateinit var binding : ActivitySongBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // binding 초기화 (<- binding 객체 획득)
        binding = ActivitySongBinding.inflate(layoutInflater) 
        // 액티비티 화면에 출력
        setContentView(binding.root) 
        
        // 뷰 객체 이용
        binding.songDownIb.setOnClickListener {
            finish()
        }
        binding.songMiniplayerIv.setOnClickListener {
            setPlayerStatus(false)
        }
        binding.songPauseIv.setOnClickListener{
            setPlayerStatus(true)
        }
    }
}

xml 코드에

<ImageView
           android:id = "@+id/songDownIb"
/>

이렇게 표기했다면 바인딩 객체에 songDownIb 라는 프로퍼티로 등록이 되어서 binding.songDownIb 로 접근할 수 있다.

뷰 바인딩을 build.gradle 에서 선언하기

build.gradle 에서 뷰 바인딩을 사용하겠다고 선언할 수 있다. 이때 뷰 바인딩이 필요없는 xml 파일들은 최상위 루트에 tools:viewBindingIgnore="true"라는 속성을 추가하면 이 xml 파일에 해당하는 바인딩 객체를 생성하지 않는다.

참고자료

  • Do it 안드로이드 도서
profile
컴공학부생입니다.

0개의 댓글