[Android] View Binding

한시삼십사분·2023년 1월 20일
1

Android

목록 보기
1/10
post-thumbnail

🧐ViewBinding을 사용하는 이유

ViewBinding을 사용하면 View와 상호작용 하는 코드를 쉽게 작성할 수 있다.

위 내용은 안드로이드 공식문서에 나와있는 내용이다.
ViewBinding(DataBinding, Kotlin Extensions 등등..)을 사용하지 않는다면

val btnLogin = findViewById<Button>(R.id.btnLogin)
btnLogin.setOnClickedListener{...}

와 같은 방식으로 코드를 작성했다.
이때, Button이 10개, 20개... TextView가 20개... 와 같은 식으로 늘어난다면 findViewById 코드를 n번 반복해서 작성해야 한다.
ViewBinding은 findViewById와 같은 반복적인 코드를 제거해줄 수 있다.

💻ViewBinding을 사용하는 방법

  • Module단 build.gradle

android{
...
    viewBinding{
        enabled = true
    }
}

(2023.01.20 기준 안드로이드 공식문서에는 위와 같이 나와있다.
https://developer.android.com/topic/libraries/view-binding?hl=ko)

android{
...
    buildFeatures{
        viewBinding true
    }
}

(다른 블로그 글들을 참고했을 때, 위와 같이 나와있는 글도 많아 직접 실행시켜보니 두 코드다 문제 없이 작동한다.)

  • activity_main.xml

<Layout>

	<Button
    	android:id="@+id/btn1"
        ...
        />

</Layout>

위와 같이 id를 btn1으로 하는 Button 하나를 생성한다.

  • MainActivity.kt

...
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

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

        binding.btn1.setOnClickListener {
			...
        }
    }
}

이제 MainActivity.kt 내에서 activity_main.xml 내의 id가 부여된 view에 대해 findViewById가 아닌 binding.{id}로 접근할 수 있다.

  • TestFragment.kt

    Fragment에서 사용하는 방법도 비슷하다.
class TestFragment : Fragment() {

    private var _binding: FragmentTestBinding? = null
    private val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentTestBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }
}

이제 fragment_test.xml내의 id가 부여된 view에 대해 binding.{id}로 접근하여 사용할 수 있다.

✍️정리

MVVM, LiveData 등을 사용하면서 DataBinding은 몇번 사용해봤지만 ViewBinding은
'아 이런게 있구나' 하고 넘어가는 정도였다. 상황에 따라 ViewBinding과 DataBinding중 적절한 상황이 있다는데 그 부분에 대해서는 DataBinding을 정리하면서 같이 공부 해봐야겠다.

profile
인간은 망각의 동물이라지만 이건 너무한 거 아니냐고

0개의 댓글