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_주민철_1주차 과제(1,2단계) 제출 #25

Open
wants to merge 57 commits into
base: joominchul
Choose a base branch
from

Conversation

joominchul
Copy link

Step 1 커밋 : 커밋

어려웠던 점 또는 궁금한 점

  • 데이터베이스에서 테이블을 수정, 특히 컬럼 타입을 변경하려고 할 때 modify로 하려 하니 오류가 나고, 새로운 테이블을 만들고, 거기에 기존 데이터를 복사한 다음, 기존 테이블 지우고, 새로운 테이블 이름을 기존 테이블 이름으로 변경해야 했습니다. 이렇게 돌아가야 되는 것이 맞는지, 아니면 그냥 modify로 해도 됐는데, 다른 부분에서 문제가 발생한 것인지 궁금합니다.
  • 연락처 클릭 시 연락처 상세 정보 창을 불러올 때, 연락처 클래스 자체를 인텐트 데이터로 보내지 못 하고, 클릭한 연락처의 ID만 보내 상세 정보 액티비티에서 ID를 가지고 데이터베이스에서 데이터를 가져와 상세 정보를 보였습니다. 혹시 putExtra 함수에서 클래스를 보낼 수 있는 방법이 있을까요?

생일 editText를 텍스트뷰로 변경
라디오 버튼 추가, 데이트피커를 넣었다가 뺌
생일 클릭 시 달력 보이게 하는 것, 더보기 클릭 시 추가 정보 입력 창 보이게 하는 것 추가
전화번호 타입을 String에서 Int로 변경
UI 선언 위치를 onCreate 밖으로 빼냄
데이터베이스의 모든 데이터를 로그로 출력하는 함수 생성
메인 화면을 스크롤뷰로 변경하였음. 또한 키보드를 사용 시 취소, 저장 버튼이 키보드 바로 위에 오게끔 하였음.
메인 화면을 스크롤뷰로 변경하였음. 또한 키보드를 사용 시 취소, 저장 버튼이 키보드 바로 위에 오게끔 하였음.
2단계에 따른 1단계 파일들 이름 변경.
추가 버튼에 사용될 금색 추가.
addButton(추가 버튼) 클릭 시 연락처 추가 화면 호출
MIGRATION_1_2을 AddContact에서 Contact로 옮김.
전화번호의 타입을 String으로 변경
전화번호 타입 변경에 따른 MIGRATION_2_3 추가
기능 요구사항 만족을 위한 데이터베이스 초기화
연락처를 클릭 시 연락처의 ID를 상세 정보 페이지에 보내면서 호출.
loadAllData 함수 로그에 메모도 표시
뒤로 가기 버튼이 눌리고, 정보를 하나라도 입력했을 때 팝업창 띄움.
생일 입력 시 월과 일의 입력 포맷을 00으로 설정함.
뒤로 가기 버튼 클릭 후 다시 앱을 실행했을 때 간헐적으로 앱이 디스트로이 되지 않는 경우가 발생. 이 경우 연락처 초기화가 이루어 지지 않음. 따라서 뒤로 가기 버튼 클릭 시 데이터베이스 초기화 실행
@joominchul joominchul changed the base branch from main to joominchul June 28, 2024 08:27
뒤로 가기 버튼 이외 버튼 클릭 시 종료되는 현상 수정
Copy link

@mkSpace mkSpace left a comment

Choose a reason for hiding this comment

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

안녕하세요 민철님. 앞으로 6주간 코드 리뷰를 맡게 된 제리 멘토라고 합니다.

코드를 살펴보니 많이 고민해보고 궁금하신점을 적어주신 부분이 인상 깊네요. 또한 기본적인 구현사항에 Room을 추가해서 잘 개발해주셨네요!

Room은 사실 강의 내용이 아니라 코드 리뷰에서 최대한 지양해서 말씀드린다는 점 양해 부탁드립니다.
Room은 LocalDB를 편하게 사용하기 위한 라이브러리인데요. LocalDB는 사용법에 따라 어떻게 관리하는지 다 다릅니다. 하지만 공통적으로 관리하는 주요 구성사항은 Version 입니다. 이 버전은 DB의 스키마에 변경이 생길 때 버전을 다르게 하여 (올려서) 이전 버전에서 마이그레이션을 하기 위한 중요한 장치입니다. 이 버전은 이전 앱 버전과의 호환을 위해 작성하는 것이기 떄문에 사실 배포가 나가지 않은 상태의 LocalDB인 경우 fallbackToDestructiveMigration을 통해 스키마 충돌 시 테이블을 Drop 시키는 방식으로 개발하셔도 무방합니다. 그래서 개발 시에는 기본적으로 위의 정책을 사용하고 릴리즈 전에 Version1 부터 현재 Version까지 테이블을 마이그레이션 해보고 충돌이 있는지 체크한 후 없는 경우 릴리즈 하는 방식을 사용하곤 합니다.

다음 궁금한 점으로 Intent에서 정보를 담을 때 객체 전체의 정보를 담고 심다고 하셨는데 이런 경우 class를 직렬화 한 후 전달하시면 됩니다. 이와 관련된 부분은 직접 찾아 보시면 좋겠습니다.
이어지는 궁금증으로 id를 전달하고 id를 기반으로 LocalDB에서 정보를 끌어와 사용하는 방식이 괜찮은지 여쭤보셨는데 그 방법이 정석적인 방법입니다. 그 이유는 LocalDB를 구현한 경우 이 애플리케이션의 SSOT(Single Source Of Truth)는 LocalDB입니다. 모든 View의 정보는 불일치 이슈를 겪을 수 있습니다. 그런 경우 가장 신뢰할 수 있는 SSOT가 있어야 할 텐데요 구글은 그 대상이 LocalDB가 되도록 설계하는 것을 권장합니다. 그렇기에 id 기반으로 LocalDB에 질의해서 정보를 갖고오는 로직은 매우 당연하고 정석적인 방법입니다. 오히려 View -> View로 이동할 때 모든 정보를 제공하는 방식은 지양하시는게 좋습니다. 왜냐면 View는 SSOT가 아니기에 신뢰할 수 없기 떄문입니다.

app/build.gradle.kts Show resolved Hide resolved
app/src/main/java/campus/tech/kakao/contacts/AddContact.kt Outdated Show resolved Hide resolved
app/src/main/java/campus/tech/kakao/contacts/AddContact.kt Outdated Show resolved Hide resolved
app/src/main/java/campus/tech/kakao/contacts/AddContact.kt Outdated Show resolved Hide resolved
app/src/main/AndroidManifest.xml Show resolved Hide resolved
app/src/main/res/layout/activity_main.xml Show resolved Hide resolved
app/src/main/res/layout/activity_main.xml Show resolved Hide resolved
Comment on lines +15 to +16
val inflater: LayoutInflater,
val context: Context
Copy link

Choose a reason for hiding this comment

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

ViewAdapter를 실행하는쪽의 정보를 넘겨주는 것이 아니라 클릭 콜백 메서드를 외부에서 제공해주는건 어떨까요? Adapter는 사실 Activity 가 화면을 어떻게 전환하는지 알 필요가 없습니다!

Comment on lines +31 to +34
val intent = Intent(context, ContactDetail::class.java)
//인텐트에 id 넘겨줌
intent.putExtra("contact-id", contact.id)
startActivity(context, intent, null)
Copy link

Choose a reason for hiding this comment

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

위에서 콜백 메서드를 class RecyclerViewAdapter(private val onClickItem: (Int) -> Unit)로 받아서 onClickItem(contact.id) 만 작성하면 Activity에서 알아서 콜백 메서드를 실행시키면 Adapter가 Activity의 Context 정보를 알지 않아도 될거에요

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