Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

부산대 Android_김정희_2주차 과제_2단계 #52

Open
wants to merge 19 commits into
base: lovelhee
Choose a base branch
from

Conversation

lovelhee
Copy link

@lovelhee lovelhee commented Jul 5, 2024

안녕하십니까 멘토님!
오늘도 코드 리뷰 잘 부탁드리겠습니다.
늘 정성스러운 리뷰 달아주셔서 감동 받았습니다.. 너무 감사합니다!!


중점적으로 봐주셨으면 하는 부분

  1. step1 리뷰를 참고하여 데이터 존재 여부를 체킹하는 메소드를 만들고, 체킹 후 데이터가 삽입되도록 구현하려고 했는데, 해당 부분이 올바르게 되었는지 확인해주시면 감사하겠습니다.
  2. 검색어를 실시간으로 입력하다보면 앱이 약간 지연되는 현상이 발생하곤 하던데, 이런 경우 어떤 식으로 문제를 해결하는 것이 좋을까요? (혹시.. 저의 안드로이드스튜디오에서만 생기는 문제일 수도 있습니다..)
  3. RecyclerView와 ViewModel 간의 데이터 연동을 하는 부분을 구현하기가 어려웠습니다. 해당 부분의 문제점이나 개선할 점을 봐주시면 감사하겠습니다.

Copy link

@LeeOhHyung LeeOhHyung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM~ @lovelhee 2주차 과제 늦게 확인했네요.
이미 채점은 완료해서 코멘트들은 참고만 해주세요. 고생많으셨습니다.

Comment on lines +76 to +83
private fun dataExists(tableName: String, name: String): Boolean {
val db = readableDatabase
val query = "SELECT 1 FROM $tableName WHERE ${MapContract.COLUMN_NAME} = ?"
val cursor = db.rawQuery(query, arrayOf(name))
val exists = cursor.moveToFirst()
cursor.close()
return exists
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 쿼리로 데이터 존재여부를 알수있다면 괜찮습니다.
SELECT EXISTS ... 문법도 있었던것 같네요. 차이점이 있는지 조사해보시고, EXISTS를 명시적으로 사용하는것도 괜찮을것 같습니다.

Comment on lines +48 to +57
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val keyword = s.toString()
if (keyword.isNotEmpty()) {
mapViewModel.searchPlaces(keyword)
} else {
searchResultAdapter.submitList(emptyList())
tvNoResults.visibility = TextView.VISIBLE
rvSearchResult.visibility = RecyclerView.GONE
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

검색어를 실시간으로 입력하다보면 앱이 약간 지연되는 현상이 발생하곤 하던데, 이런 경우 어떤 식으로 문제를 해결하는 것이 좋을까요? (혹시.. 저의 안드로이드스튜디오에서만 생기는 문제일 수도 있습니다..)

지금은 앞서가는 내용이지만, UI 클릭/이벤트를 다룰때 debounce or throttle 라는 개념이 있습니다.
쉽게말해 몇초이내 동일한 이벤트가 재호출되면, 마지막 호출만 유효하게 처리한다. 라는것인데요. 검색어 입력시 호출되는 메소드에 적용해보면 좋을것 같습니다.

지금은 검색어를 입력할때마다 DB를 조회하게 되는데요.
짧은 시간에 과도한 호출이 발생하면 버벅이는 현상이 생길 수 있을것 같습니다.

또 다르게는 쓰레드 / 코루틴 같이 비동기로 처리할 수 있는 방법들을 사용하는것도 도움이 될것 같습니다.
코루틴은 지금 바로 사용하기엔 커리큘럼상 적합하지 않을수있으니 키워드만 알고 자세한 사용법이나 개념은 따로 한번 찾아보세요!

Comment on lines +19 to +22
fun searchPlaces(keyword: String) {
val results = dbHelper.searchPlaces(keyword)
_searchResults.postValue(results)
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RecyclerView와 ViewModel 간의 데이터 연동을 하는 부분을 구현하기가 어려웠습니다. 해당 부분의 문제점이나 개선할 점을 봐주시면 감사하겠습니다.

ViewModel 에서 조회한 데이터를 -> Activity로 넘기는 처리가 필요한데 LiveData 사용하신것은 좋았습니다. 흔히 사용하는 방법중 하나입니다.

다만, postValue(...) , setValue(...) 2가지 함수를 지원하는데, 각각의 차이를 알고 사용해보면 좋을것 같습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants