Android

(Android Studio) - View Binding

돗개진 2024. 4. 11. 20:42

[ View Binding ]

 

- 뷰 바인딩 기능이란 뷰와 상호작용 하는 코드를 쉽게 작성할 수 있도록 하는 것

- 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성함

- 바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함됨

- 대부분의 경우 뷰 바인딩이 findViewById 를 대체

 

쉽게 설명해서 뷰 바인딩을 사용하면 레이아웃 ID가 있는 뷰마다 변수를 선언하여 findViewById 와 연결할 필요가 없다는 뜻이다. 뷰 바인딩을 사용하면 코드 작성이 더 편해질 수 있다.

 


[ findViewById 와의 차이점 ]

 

1) Null 안정성 (Null Safety)

-> 뷰 바인딩 기능을 사용하면 앱이 레이아웃의 각 뷰를 직접 참조할 수 있게 해 주는 안전한 코드를 자동으로 생성함. 이것은 뷰를 사용할 때 'null' 값으로 인한 오류, 즉 뷰가 아직 화면에 나타나지 않았는데 그 뷰를 사용하려고 할 때 생길 수 있는 문제들을 예방함

 

(ex: 레이아웃에 있어야 하는 버튼이 생성되지 않았다면 뷰 바인딩은 이를 안전하게 처리해 줌, 레이아웃의 일부만 뷰가 있다면 뷰 바인딩은 해당 뷰가 'Nullable' 임을 알려 주어 개발자가 더 주의 깊게 코드를 작성하도록 도움)

 

2) 타입 안정성 (Type Safety)

-> XML 레이아웃 파일에서 정의된 뷰의 타입과 자동 생성된 바인딩 클래스의 필드 타입이 항상 일치하기 때문에 타입이 서로 맞지 않아 발생하는 오류를 방지함

 

(ex: 이미지 뷰에 텍스트를 설정하려고 하면 오류가 발생할 텐데 뷰 바인딩을 사용하면 이런 실수를 할 가능성이 사라짐. 즉, 이미지 뷰는 이미지 뷰로 텍스트 뷰는 텍스트 뷰로만 사용하게 하며 잘못된 타입 사용으로 인한 오류 방지를 보장함)

 


[ 코틀린에서 뷰 바인딩 설정 방법 ]

 

1. gradle 설정

android{
	...
    
    // AndroidStudio 3.6 ~ 4.0
    viewBinding{
    	enabled = true
    }
    
    // AndroidStudio 4.0 ~
    buildFeatures{
    	viewBinding = true
    }
}

ㄴ> gradle 파일에서 둘 중 하나를 안드로이드 버전에 따라 추가하면 된다. buildFeatures { } 는 뷰 바인딩 뿐만 아니라 설정이 필요한 다른 기능을 한 번에 묶어서 추가할 수 있는 것으로 아는데 확실한지는 찾아봐야 함.

 

 

2. Activity 내 설정

import com.example.s_recyclerview.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

ㄴ> 뷰 바인딩을 액티비티 내에 설정할 때는 onCreate 메서드 밖에서 binding 변수를 선언해 주고 onCreate 메서드 안에서binding 변수를 inflate 하여 setContentView() 의 인수로 생성한 binding 변수를 넘겨 주면 된다.

 

// 뷰 바인딩을 통해 겍체 안 id를 접근하는 법
binding.button1.text = "안녕"
binding.button2.setBackgroundColor(Color.BLACK)

ㄴ> 위는 binding 된 객체 안에 있는 id 에 접근하여 사용하는 방법이다. findViewById 보다 훨씬 사용하기 간략하고 편하다.

 


 

[ !! 중요 !! ]

뷰 바인딩(View Binding) 기능을 사용할 때, 안드로이드 스튜디오는 레이아웃 파일의 이름을 기반으로 한 바인딩 클래스를 자동으로 생성함. 이 클래스는 레이아웃에 있는 모든 뷰에 대한 참조를 포함하며 이를 통해 코드에서 직접 뷰에 접근할 수 있게 해 줌. 바인딩 객체의 이름은 레이아웃 파일 이름에 Binding 을 붙여 만들어짐

 

EX

- 레이아웃 파일 이름이 activity_main.xml 인 경우, 생성되는 바인딩 클래스의 이름은 ActivityMainBinding 이 됨

- 레이아웃 파일 이름이 fragment_home.xml 인 경우, 생성되는 바인딩 클래스의 이름은 FragmentHomeBinding 이 됨