AndroidProject 를 진행해본 사람이라면, 누구나 익숙한 아래와 같은 코드를 보았을 것입니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
그리고 우리는 이러한 Activity 에서 매번 반복되는 것을 조금더 쉽게 하고자, 상속을 받은 Activity 를 사용하곤 합니다.
예를 들면, 아래와 같이 Toast 를 띄우기 위해 매번 생성하는 수고를 덜기 위하여 BaseActivity 에서 생성 및 보여줌을 담당하고
해당 BaseActivity 를 상속받은 Activity 는 문자열만을 전달하여 호출한다고 하겠습니다.
class BaseActivity : AppCompatActivity() {
fun showShortToast(message: String) {
Toast(this).apply {
setText(message)
duration = Toast.LENGTH_SHORT
}.show()
}
}
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
showShortToast("onCreate()")
}
}
당장의 코드는 굉장히 편해보이고, 쉽게 사용할 수 있을 것 같지만,
BaseActivity , ToastActivity, BackActivity, SafetyActivity 등등... 작성자가 순간에 필요하다고 판단한것을
작성해 나가다 보면, 이후 Project 에 참여한 사람이나, 함께 코드를 작성하던 동료들이
"그래서 어떤 Activity 를 상속받으란거지?"
"이 기능을 하는 코드가 상위 클래스중에 있는게 있나?"
"이거 없겠지~ 그냥 작성하지뭐~"
라는 생각들이 겹치면, 결국 이도저도 아닌 중복코드가 나오게 되고, 누군가는 상속받아 사용하고, 누군가는 그냥 새롭게 작성하여 사용하면서 코드 추적도 어려워지게 되는 것 같습니다.
상속받아서 사용해야 하는 상위 클래스가 정확히 어떤기능을 하는지, 정말 상속받아서 사용할정도의 필요함이 있어서
누구나 쉽게 파악이 가능하도록 짜는것이 가장 좋겠지만
그것이 어렵고, 제대로 관리가 안되는 것이라면
BaseActivity , ToastActivity, BackActivity, SafetyActivity 등등... 무분별하게 사용되는 것은 "지양" 하고 싶다는 생각이 들었습니다.
역시 난이도는 신규개발보다 기존코드를 유지보수하며 추가해나가는 것이 더 어려운것 같습니다..
그리고 그러한 과정중에 더 많은것을 느끼고, 배우는게 아닐까란 생각도 듭니다..
(지금의 제 생각이 틀릴 수도 있겠지만, 그 조차 정답에 찾아가기 위한 스텝이라고 생각하며.. 마치겠습니다.)