본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드 Kotlin] 뷰바인딩(View Binding) 설정 및 사용 방법

by 카레유 2021. 7. 19.

# 뷰바인딩이란?

원래 레이아웃 XML파일에 정의된 View에 접근하는 방법은 findViewById()메서드를 활용하는 것이었다.

이후 코틀린이 도입되면서 '코틀린 익스텐션'을 통해 쉽게 뷰를 다룰 수 있었다.

그러나 이제는 "뷰 바인딩"이 코틀린 익스텐션을 대체한다.

 

뷰 바인딩은 코틀린 환경의 안드로이드에서 뷰에 접근하는 새로운 방식이다.

(물론 findViewById는 여전히 쓸 수 있다)

 


# 뷰바인딩 설정 방법

1. build.gradle(Module:...) 파일 선택

2. android > buildTypes 항목에 buildFeatures { viewBinding true } 설정 추가

3. Sync Now 클릭

 


# 뷰바인딩 사용 방법

1. 레이아웃XML파일 생성

2. 바인딩 초기화 

3. root뷰(레이아웃) 표시

4. ID로 뷰에 접근

class MainActivity : AppCompatActivity() {

    // 여기서 lazy로 초기화하고 사용해도 됨
    // val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 1. 바인딩 초기화
        val binding = ActivityMainBinding.inflate(layoutInflater);

        // 2. 레이아웃(root뷰) 표시
        setContentView(binding.root);

        // 3-1.뷰바인딩으로 버튼 접근
        binding.myButton.setOnClickListener {

            // 3-2. 뷰바인딩으로 텍스트뷰 접근
            binding.myTextView.text = "바인딩이 잘 되네요!";
        }

}

 

각각에 대해 자세히 설명하면 아래와 같다.

 

1. 레이아웃.XML 생성

: activity_main.xml 파일에 버튼(id: myButton), 텍스트뷰(id: myTextView)를 생성했다고 가정

 

 

2. 바인딩 생성

: 레이아웃 파일명의 첫글자와 언더바( _ ) 다음 글자를 대문자로 바꾸고, 뒤에 Binding을 붙인 이름으로 바인딩이 생성된다.

: infalte(layoutInflater) 로 초기화하여 변수에 저장해준다.

 

// 바인딩 초기화
val binding = ActivityMainBinding.inflate(layoutInflater);

// 참고: 상황에 따라 lazy를 사용해 클래스 프로퍼티로 초기화해도 된다
// val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

 

 

3. 레이아웃 설정

: setContentView() 메서드를 통해 root뷰(레이아웃)을 화면에 표시하도록 설정한다.

 

// 레이아웃(root뷰) 표시
setContentView(binding.root);

 

 

4. 뷰 사용

레이아웃파일에 생성해둔 뷰들은 "binding.뷰ID" 로 접근할 수 있다.

 

// 뷰바인딩으로 버튼 접근
binding.myButton.setOnClickListener {

     // 뷰바인딩으로 텍스트뷰 접근
     binding.myTextView.text = "바인딩이 잘 되네요!";
}

 


- 실행 결과

버튼을 누르면 TextView의 텍스트가 변경된다.


Fragment 에서 뷰바인딩을 사용하는 방법은 아래 글 참고

[안드로이드 Kotlin] Fragment 에서 뷰바인딩(View Binding) 사용 방법

댓글