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주차 과제 Step2 #34

Open
wants to merge 17 commits into
base: cleonno3o
Choose a base branch
from

Conversation

cleonno3o
Copy link

@cleonno3o cleonno3o commented Jul 4, 2024

Step1 커밋

https://github.com/kakao-tech-campus-2nd-step2/android-map-keyword/pull/34/files/0183943bcffa34d9682fdcaf65af7165c8b29c2b

어려웠던 점

  • DB를 안드로이드에서 처음 다뤄보아 익숙치 않았습니다
  • MVVM을 처음 들어보고 학습 후 적용해보는데 어려움을 겪었습니다. 강의나 예제 코드를 접하기 쉽지않아 개념적으로는 어느정도 이해한 것 같지만 실제로 적용하려고 하니 어려웠습니다.
  • LiveData를 이해하고 적용하는데 어려웠습니다. 그래도 적용하고 나니 사용하지 않는 것보다 오히려 편하게 구현할 수 있는 부분이 있어 좋았습니다.

중점적으로 리뷰해주셨으면 하는 부분

  • 아무래도 step1의 경우 기능 구현이나 레이아웃 구성 보다는 MVVM에 초점이 맞춰져있는 것 같은데 잘 구현되었는지 의문입니다. 일반적으로 찾아봐도 Binding, Room등 다양한 기술을 사용한 예시가 대부분인 것 같아 과제의 취지에 맞게 기타 새로운 기술을 사용하지 않고 적용이 잘 된 것인지 궁금합니다.
  • step2과정에서 많은 기능을 구현하면서도 일관되게 패턴이 유지되었는지 궁금합니다. 바인딩을 쓰지 않고 View가 이벤트를 처리하게 하기 위해 Listener를 통해 구현해보았습니다. 이벤트 발생 시 View가 직접 데이터를 가지고 삭제, 추가 하지 않고 ViewModel이 자신이 가진 데이터를 통해 작업을 수행하도록 했다고 생각하는데 최선인지 잘 모르겠습니다. 결국에 MVVM이 지향하는 바를 구현하려면 바인딩을 사용해야 하는 건지 궁금합니다

제가 이해한 MVVM과 구현한 클래스

  • View
    • MainActivity: ViewModel객체를 갖고 있고, findByViewId를 통해 View를 가져와 onClickListener를 등록해 입력을 처리
  • Model:
    • MapModel: 실제 db에서 데이터를 가져오고 추가하는 메서드를 정의
  • ViewModel
    • MapViewModel: MapModel 객체를 갖고 있고, MapModel에서 정의한 메서드를 통해 데이터를 가져오고 View가 이 데이터를 observe하여 View를 표현
  • 기타
    • MapDbHelper: 실제 DB

이렇게 생각했고 코드를 작성했다고 생각하는데 맞는지 궁금합니다.

실행화면

}

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL(SQL_DELETE_ENTRIES)
Copy link

Choose a reason for hiding this comment

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

db 버전이 업그레이드될때 실행되는 마이그레이션 작업인데
지금은 모든 데이터를 지우고 새로 설정 해주시고 계시네요 ㅎㅎ
지금은 실 서비스가 아니니까 상관 없는데
실제 서비스를 할땐 이런 작업을 유의해야합니다.
앱 업데이트를 했는데 내가 저장해둔 데이터가 날아가면... 무수히 많은 문의를 받을수도 있거든요

Copy link
Author

Choose a reason for hiding this comment

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

이번 과제에서 실제로 upgrade하는 상황이 발생하지 않아 다 지워버리고 새로 생성한다고 구현했던 것 같습니다! 하지만 실제 서비스에서는 발생하면 정말 아찔할 것 같습니다.. 앞으로 실제 서비스여도 괜찮을지 고민해보며 구현하겠습니다!

private val helper: MapDbHelper = MapDbHelper(mContext)

init {
helper.readableDatabase
Copy link

Choose a reason for hiding this comment

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

불필요한 init 함수로 보이네요~!

Copy link
Author

Choose a reason for hiding this comment

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

step1 을 진행하면서 아무 작업도 안했을 때 db가 초기화 안되어서 만들었던 함수같습니다! 삭제하도록 하겠습니다!


fun insertHistory(historyName: String) {
model.insertHistory(historyName)
_searchHistory.value = model.getAllHistory()
Copy link

Choose a reason for hiding this comment

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

(아직 안배우셨을거 같아서 대응하지 않으셔도 됩니다)
db에 쿼리를 날리는 작업은 대체로 오래 걸립니다.
지금도 쿼리가 실행되는 시간을 측정 해보시면 몇십~몇백ms정도는 나올거에요
이정도 눈깜빡할 시간도 UI 쓰레드에서 실행하면 유저에겐 버벅임으로 느껴질수 있습니다.
UI쓰레드를 방해하지 않을 방법을 한번 고민 해보시면 좋을거 같아요

Copy link
Author

Choose a reason for hiding this comment

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

SQLite 공식 문서도 백그라운드 스레드에서 하는것을 하는군요. 추후 스레드를 공부해보고 개선된 방법을 적용하겠습니다!
안드로이드 에뮬레이터에서 실행할때 살짝 버벅였던 게 그런 이유였나 싶습니다!

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

Successfully merging this pull request may close these issues.

2 participants