오늘은 프로젝트 진행중 궁금했었던 내용을 정리해서 개념 정리를 해보았다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView = findViewById<TextView>(R.id.text_Status)
textView.text = "activity created"
}
override fun onStart() {
super.onStart()
Log.d("TAG", "onStart : activity started")
}
override fun onResume() {
super.onResume()
Log.d("TAG", "onStart : activity resumed")
}
override fun onPause() {
super.onPause()
Log.d("TAG", "onPause : activity paused")
}
override fun onStop() {
super.onStop()
Log.d("TAG", "onPause : acitivity stopped")
}
override fun onDestroy() {
super.onDestroy()
Log.d("TAG", "onPause : activity died")
}
}

앱을 켰을때 onCreate()가 최초로 호출되고

onStart와 onResume이 호출되었다.

홈 버튼으로 백그라운드에 앱을 두었더니 onPause와 onStop이 호출되었다.

다시 앱으로 돌아오니 onRestart와 onStart, onResume이 실행되었다.

마지막으로 앱을 종료할때는 onPause, onStop, onDestroy가 순서대로 호출되었다.
생명주기를 직접보니까 뭔가 신기했다.
참고 : https://rkdrkd-history.tistory.com/47
과제를 구현하면서 알게된 단어인 싱글톤 패턴이 무엇인지 궁금했었는데 한번 알아보았다.
싱클톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 객체를 만들어 사용하는 디자인 패턴이다. 생성자의 호출이 반복적으로 이루어 지더라도 실제로 생성되는 객체는 최초에 생성된 객체를 반환해 주는 것이다. 즉, 객체를 한번만 생성하고 생성된 객체를 재사용하면서 객체의 재생성 비용을 줄이는 패턴이다.
코틀린에서는 클래스 이름앞에 object 키워드를 붙이면 싱글톤 클래스를 만들 수 있다.
이 경우에는 생성자를 호출하지 않는 클래스에서만 사용할 수 있다.
companion object는 생성자를 통해 파라미터를 전달받는 싱글톤 클래스이다.
반복되는 객체의 인스턴스 사용에서 메모리 낭비를 방지하기 위해 사용한다는 점은 이해되었다!
recyclerView는 말 그대로 view를 재활용하여 사용하는 방법으로 listView의 단점을 보완한 상위 호환이라고 알고 있다. 스크롤 할 때마다 맨 위의 아이템이 삭제되고 맨 아래 아이템이 생성 되길 반복했던 listView와는 달리 맨 위의 아이템을 재활용하여 아래로 이동해 재사용되는 것이 recyclerView이다.
Adapter
ViewHolder
onCreateViewHolder
onBindViewHolder
뷰가 바인드(bind)될때 호출되는 메소드로 onCreateViewHolder에서 뷰가 만들어졌다면 onBindViewHolder는 뷰에 내용이 씌워지는 때이다.
onBindViewHolder는 스크롤을 내리거나 올릴때마다 호출된다.
gemItemCount
LayoutManager
참고 : https://uknowblog.tistory.com/29
https://velog.io/@ouowinnie/Kotlin-%EA%B0%9C%EB%85%90-%EB%A6%AC%EC%82%AC%EC%9D%B4%ED%81%B4%EB%9F%AC%EB%B7%B0-RecyclerView