코틀린 기반으로 쓰여짐


1) 제트팩?

Android Jetpack is a set of components, tools and guidance to make great Android apps. The Android Jetpack components bring together the existing Support Library and Architecture Components and arranges them into four categories:

Android Jetpack은 훌륭한 Android 앱을 만들기 위한 구성 요소, 도구 및 지침 세트이다. Android Jetpack 구성 요소는 기존 지원 라이브러리 및 아키텍처 구성 요소를 결합하여 다음과 같은 네 가지 범주로 나뉩니다. 

  1. Architecture
  2. UI
  3. Foundation
  4. Behavior

 

 

https://android-developers.googleblog.com/2018/05/use-android-jetpack-to-accelerate-your.html

 

2) AAC?

AAC(Android Architecture Components)는 jetpack에서 Architecture에 해당하는 부분으로 테스트와 유지보수가 쉬운 안드로이드 앱을 디자인할 수 있도록 돕는 라이브러리 모음이다.

AAC를 활용하면 현재 구글에서 권장하는 MVVM 구조로 앱 설계가 가능해진다.
다음은 앱 아키텍쳐 가이드의 권장 구조의 도식도이다.

위 그림을 참고해서 보면 알겠지만 아키텍쳐파트에는 데이터 바인딩 라이프사이클 라이브데이타 네비게이션등이 있다.

오늘 우리는 아키텍쳐에 대해 본격적으로 공부하기 전 뷰 바인딩이라는것을 먼저 배워보려고 한다.

 

3) Viewbinding?

쉽게 얘기하면 findviewbyid를 쓰지 않고 XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식이다. object는 자동으로 만들어진다

3-1) 왜 써야해?

기본적으로 id는 같을 수 있다. findviewbyid 를 통하여 접근하게 되면 같은 id가 있다는 가정이면 어떤 id에 접근하는건지 명확하지 않다. 이를 방지하기 위하여 쓴다.또 레이아웃에 없는 id를 접근하게 될 때 nullsafe를 보장해준다.

 

3-2) 어떻게 써야해?

1)모듈 수준의 gradle 을 수정한다.

 

사용하고 있는 안드로이드 스튜디오 버전이 4.0 이상

buildFeatures {
        viewBinding true
    }

3.6 이상 4.0 미만

viewBinding {
        enabled = true
    }

사실 뭘 해도 둘다 적용되는걸로 보아 상관 없는거같다. 그래도 알고는 있자

 

2)액티비티에서 사용해보기

private lateinit var binding: ActivityMainBinding

 

 

참고로 액티비티 이름따라서 자동으로 만들어진다. 내 액티비티 이름이 mainActivity라 AcitivtyMainbinding인것이다. 이름 맞춰서 써주면 된다.

 

 

2-1)

원래는 R.layout.activity_main을 넘겨주지만 이번에는 우리가 생성한 루트 뷰를 넘겨준다

 

binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

 

 

2-2) 사용해보기

binding.fab.setOnClickListener { view ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
        }

위 코드는 리스너를 달아본것이다.

 

3)프레그먼트에서 사용해보기

class FirstFragment : Fragment() {

    private var _binding: FragmentFirstBinding? = null

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        _binding = FragmentFirstBinding.inflate(inflater, container, false)
        return binding.root

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.buttonFirst.setOnClickListener {
            findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

 

사실 액티비티랑 크게 다를건 없다.

 

 

 

우리가 하나 주목해봐야 할건 _binding 과 binding이 왜 두개나 있냐는건데

_binding은 우리가 사용하지 않을 때 자원을 null 값으로 만들어 주기 위해서 존재하는 것이다.

그니까 nul을 위해 존재 하는값임.

 


참고

안드로이드 뷰 바인딩(view binding) (tistory.com)

 

안드로이드 뷰 바인딩(view binding)

1. 뷰 바인딩  1-1. 라떼는 말이야...  1-2. 변천사  1-3. findViewById와의 차이점 2. 사용법  2-1. gradle 추가  2-2. 액티비티  2-3. 프래그먼트  2-4. viewBindingIgnore 1. 뷰 바인딩 1-1. 라떼는 말..

todaycode.tistory.com

 

+ Recent posts