멘티 질문은 멘토링 시간 내에 실시간으로 질문 받으면서 진행했습니다.
질문
•
데이터베이스 파일의 이름은 아무 이름이나 써도 되나요?
SQLiteOpenHelper(context, "Test.db", null, 1)
Test.db 등 Database 파일은 개발자가 마음대로 지어도 되며, 실제 핸드폰 저장 공간에 Test.db라는 데이터베이스 파일이 생성된다고 말씀드렸습니다. 추가로 version에 대해서 설명드리며 version이 올라갈 경우 migration을 고려해야 한다고 설명드렸습니다.
•
DAO 파일이랑 DBHelper 파일이 있는 이유가 궁금해요. DBHelper 파일에 update, insert 함수 모두 존재하면 되는거 아닌가요?
클래스 책임 분리에 대해서 설명 드리면서 DAO는 Database에서 값을 관리하는 역할을, DBHelper는 Database 생성 및 업데이트를 관리하는 역할을 가진다고 설명드렸습니다.
•
MVVM 개념이 아직 정확히 잡혀있지 않아요
RecyclerView를 구현하기 위해서는 ViewHolder, Adapter가 필요하며, ViewHolder와 Adapter의 역할과 함수들을 라이브 코딩으로 설명드렸습니다.
/**
* Recyclerview 관리자.
*
* RecyclerView.Adapter를 상속을 받아야 함. 제네릭 타입 -> 자료형이 뷰홀더 클래스
*
* - onCreateViewHolder
* 실제로 뷰 객체로 만드는 곳.
*
* - getItemCount
* 리스트 size
*
* - onBindViewHolder
*/
class MainRecyclerAdapter : RecyclerView.Adapter<MainViewHolder>(){
private var itemList: List<Int> = emptyList()
fun updateList(newList: List<Int>) {
itemList = newList
//notify*
notifyDataSetChanged() // 리스트 100개 100개를 모두 새로고침
notifyItemChanged(100) // 100 index에 해당하는 로우만 새로고침
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder {
val rowBinding = RowBinding.inflate(layoutInflater)
val mainViewHolder = MainViewHolder(rowBinding)
rowBinding.root.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
return mainViewHolder
}
override fun getItemCount(): Int {
return itemList.size
}
override fun onBindViewHolder(holder: MainViewHolder, position: Int) {
holder.textViewRow.text = viewModelTest2.dataList.value?.get(position)?.data1
}
}
// ViewHolder 클래스를 만들어야 됨.
// RecyclerView.ViewHolder 클래스를 상속을 받아야한다. -> RecyclerView의 리스트 한 Row의 뷰를 Adapter에게 알려줌
// 뷰 계획서.
// 실제로 뷰는 만들어지지 않았지만 이렇게 만들어 질거다.
class MainViewHolder(rowBinding: RowBinding) : RecyclerView.ViewHolder(rowBinding.root) {
var textViewRow:TextView
init{
textViewRow = rowBinding.textViewRow
rowBinding.root.setOnClickListener {
val newIntent = Intent(this@MainActivity, ResultActivity::class.java)
// 값을 가지고 있는 객체를 추출한다.
val t1 = viewModelTest2.dataList.value?.get(adapterPosition)
newIntent.putExtra("testIdx", t1?.idx)
// // ViewModel 객체에 새로운 값을 설정한다.
// viewModelTest1.data1.value = t1?.data1!!
// viewModelTest1.data2.value = t1?.data2!!
startActivity(newIntent)
}
}
}
Kotlin
복사