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주차 과제 Step1 #23

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

Conversation

cleonno3o
Copy link

어려웠던 점

  • DB를 안드로이드에서 처음 다뤄보아 익숙치 않았습니다
  • MVVM을 처음 들어보고 학습 후 적용해보는데 어려움을 겪었습니다. 강의나 예제 코드를 접하기 쉽지않아 개념적으로는 어느정도 이해한 것 같지만 실제로 적용하려고 하니 어려웠습니다.

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

  • 아무래도 step1의 경우 기능 구현이나 레이아웃 구성 보다는 MVVM에 초점이 맞춰져있는 것 같은데 잘 구현되었는지 의문입니다. 일반적으로 찾아봐도 Binding, LiveData, Room등 다양한 기술을 사용한 예시가 대부분인 것 같아 과제의 취지에 맞게 SQLite외 기타 새로운 기술을 사용하지 않고 적용이 잘 된 것인지 궁금합니다.

제가 이해한 MVVM

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

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

스크린샷 2024-07-03 오후 12 53 04


object MapContract {
object MapEntry : BaseColumns {
const val TABLE_NAME = "map"
Copy link

Choose a reason for hiding this comment

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

object 내에 object 로 선언하신 이유가 있으실까요?

Copy link
Author

@cleonno3o cleonno3o Jul 7, 2024

Choose a reason for hiding this comment

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

MapContract는 db를 가리키고 내부에 테이블마다 Column이름을 상수로 가지게 하려고 object로 선언했습니다!
그런데 나중에 step2에서 잊고 적용을 안한 것 같네요..

const val DATABASE_VERSION = 1

private const val SQL_CREATE_ENTRIES =
"CREATE TABLE ${MapContract.MapEntry.TABLE_NAME} (" +
Copy link

Choose a reason for hiding this comment

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

쿼리 잘 만드셨네요 👏
kotlin에서는 이렇게 multiline 으로 정의해야하는 string을 좀더 손쉽게 명세할수 있는 기능이 있습니다.
https://kotlinlang.org/docs/strings.html#multiline-strings
한번 써보시겠어요?

Copy link
Author

Choose a reason for hiding this comment

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

잊고 있었던 기능인데 상기시켜 주셔서 감사합니다! 추후에 작성할 상황에서 적용해보겠습니다!

onCreate(db)
}

private fun initializeDb(db: SQLiteDatabase?) {
Copy link

Choose a reason for hiding this comment

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

nullable 처리가 조금 아쉽네요
애초에 db가 null이라면 initializeDb함수가 호출되는게 의미가 없을거 같습니다.
어떤 경우에 db가 null이 될수 있나요?

Copy link
Author

Choose a reason for hiding this comment

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

Android에서 자동 import를 했을때에 생성된 함수를 그대로 사용했었습니다!
그런데 안드로이드 공식문서나 예제에서도 non-null타입으로 db를 매개변수로 받는데 어느것이 맞는지 잘 모르겠습니다.
지금 생각해보기에는 앱을 설치한 후 사용자가 임의로 db파일을 직접 삭제하는 경우가 있을 것 같습니다!

지금 코드에서는 null이면 다시 onCreate를 호출하는 방향으로 수정할 것 같습니다!

content.put(MapContract.MapEntry.COLUMN_NAME_CATEGORY, location.category)
content.put(MapContract.MapEntry.COLUMN_NAME_ADDRESS, location.address)

writableDb.insert(MapContract.MapEntry.TABLE_NAME, null, content)
Copy link

Choose a reason for hiding this comment

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

db 작업은 에러가 발생할수 있는 대표적인 케이스중 하나입니다.
에러처리에 대해서도 한번 고민 해보시겠어요?

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