[ 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 이 됨
'Android' 카테고리의 다른 글
(Android Studio) - RecyclerView 사용 방법 (0) | 2024.04.16 |
---|---|
(Android Studio) - Adapter View (0) | 2024.04.12 |
(Android Studio) - 다국어 지원 설정, strings.xml (1) | 2024.04.03 |
(Android Studio) - Fragment 데이터 전달 방식 (0) | 2024.04.01 |
(Android Studio) - Fragment LifeCycle (0) | 2024.04.01 |