728x90
얘의 사용 이유?
BaseActivity, BaseFragment 를 통해 보일러 플레이트 코드(반복되는 코드)를 정리하기 위해서!
- 간단히 말하자면, "코드의 중복을 줄이고 가독성을 높이기 위해"서 프로젝트의 뼈대로 사용되는 클래스이다.
- 보통 binding이나 그 외 여러 activity/fragment 걸처 공통적으로 수행하는 코드에 대하여 초기화나 이벤트 등을 정리해둠으로서 나중에 다른 activity/fragment에서 이를 상속하여 사용한다.
기존 방식
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.lifecycleOwner = this
}
}
하지만 이렇게 BaseActivity클래스를 만든다면
abstract class BaseActivity<T : ViewDataBinding>(
@LayoutRes private val layoutResId: Int
) : AppCompatActivity() {
private var _binding: T? = null
val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = DataBindingUtil.setContentView(this, layoutResId)
}
override fun onDestroy() {
super.onDestroy()
}
}
다음과 같은 방식으로 반복되는 코드 사용을 줄일 수 있다!
class HomeActivity : BaseActivity<ActivityHomeBinding>(R.layout.activity_home) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
같은 이유로 BaseFragment의 코드
abstract class BaseFragment<T : ViewDataBinding>(@LayoutRes private val layoutRes: Int) : Fragment() {
private var _binding: T? = null
val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
}
override fun onDestroyView() {
_binding = null
super.onDestroyView()
}
}
로 코드를 짰다!
그럼 이런씩으로 활용 가능!
class ProfileFragment : BaseFragment<FragmentProfileBinding>(R.layout.fragment_profile) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
어떻게 설계하는지는 본인의 마음~
대신
1. 공통적인 코드라고 무조건 Base에 넣는 것은 좋은 코드라고 할 수 없다. 이럴 경우 차라리 Util 관련 클래스를 만들어 따로 빼서 쓰는 것이 더 이상적일 것
2. lifecycle을 꼭 지키도록 설계
3. 몇개가 만들어질지 모르는 변수들(ex : viewmodel)은 base 부분에 넣지 않는 것을 추천
728x90
'ⓢⓣⓤⓓⓨ > ⓐⓝⓓⓡⓞⓘⓓⓢⓣⓤⓓⓘⓞ' 카테고리의 다른 글
[Android] databinding과 bindingAdapter (0) | 2022.05.25 |
---|---|
[Android] 클린 아키텍처(Clean Architecture) (0) | 2022.01.28 |
[Android] MVVM 패턴 (3) | 2022.01.27 |
[Kotlin] Retrofit2 (0) | 2021.11.14 |
[Kotlin] 백 스택 (0) | 2021.11.07 |
댓글