'오늘은 건드릴 거 없을 테니 sealed class를 해볼까?' 했지만 튜터님께 한번 물어보고 가야지 싶어서 질문하고 왔는데 건드릴 게 또 생겼다.
그리고 생각해보고 발전시킬 것도 말해주셨다.
1. 회원가입 버튼 클릭 리스너 내부 코드 변경
이전에는 클릭 리스너 안에서 뷰모델 함수를 부르고 인텐트를 보냈었다.
그런데 인텐트를 보내는 것도 라이브 데이터의 옵저버 안에서 하라고 하셨다.
그래서 라이브 데이터도 변경하고 관련있던 함수도 변경하고 옵저버도 변경했다.
모든 에러 텍스트를 세팅할 때마다 값을 변경했던 SignUpUserEntity 타입의 라이브 데이터는 클릭 리스너로 함수가 호출됐을 때 넘어온 매개변수 값으로만 값을 업데이트하도록 변경했다.
관련함수는 EditText의 값을 넘겨 받아 위의 라이브데이터를 업데이트하고 DB에 회원 추가(or 수정)를 했다.
이름도 이해하기 힘들다면서 새로운 이름을 제안해주셨다.
fun onClickSignUp(entryType: SignUpEntryType, name: String, email: String, password: String) {
_userInfo.value = SignUpUserEntity(name, email, password)
when (entryType) {
SignUpEntryType.UPDATE -> editInfo(
userInfo.value?.email,
userInfo.value
)
else -> setInfo(userInfo.value)
}
}
이에 따라 옵저버는 업데이트된 값을 새롭게 인텐트를 만들어 그 안에 넣고 보내주는 식으로 변경했다.
이렇게 인텐트를 새로 만들고 데이터를 넣어 돌려보내도 잘 받는 줄은 몰랐다.
userInfo.observe(this@SignUpActivity) {
// 이전 액티비티로 보낼 값 설정
val newIntent = Intent()
newIntent.putExtra("info", it)
setResult(RESULT_OK, newIntent)
finish()
}
돌려보니 이전과 동일하게 동작을 하는 것을 볼 수 있었다.
2. 이후 할 예정
왜 데이터 클래스 타입의 라이브데이터는 내부 속성값만 바꾸면 옵저버에서 알아차리지 못하냐고 물어봤을 때, 튜터님은 그건 그냥 값을 수정한 것뿐이고 SetValue를 한 게 아니라고 하셨다.
SetValue를 해야 라이브데이터를 옵저빙할 수 있는 것이라고 덧붙이셨다.
이걸 이해하려면 베이킹 필드에 대해서 알아보면 된다고 하셨다.
그래서 베이킹 필드에 대해서 좀 알아봐야할 거 같다.
뷰의 액션에서 함수로 넘기면 뷰모델에서 처리하고 라이브 데이터를 처리하는데 지금처럼 데이터만 처리하는게 아니라 이벤트도 처리가 가능하다고 한다.
이건 나중에 한다고 하는데 거기에는 리스너와 토스트 메세지 등 '이런 게 들어간다고?'라고 생각되는 것들이 포함되더라
기억하고 있어야겠다.
내가 초기값을 어떻게 가지고 있는지 물어보시고나서 뷰모델 팩토리를 가지고 뷰모델에 기본값을 넘겨주는 걸 해보라고 튜터님이 말해주셨다.
팩토리 타입을 들어본 적은 있는데 한번도 안 해봐서 또 구글링 시작이다.
엔트리타입, 유저엔티티 등 보내면 된다고 하신다...
내일은 이걸 구현하는 데 시간을 보낼 거 같다.
sealed class는 내일 상황보고 하든지 말든지 하자...
튜터님은 뭐... 안 해도 된다고 하셨으니까~
'Android > StoreInfo' 카테고리의 다른 글
Facade Pattern에 대한 이해 (0) | 2024.01.22 |
---|---|
<정리> 챌린지반 과제 5 (0) | 2024.01.12 |
<정리> 챌린지반 과제 3 (1) | 2024.01.09 |
<정리> 사과마켓 앱 구현 3 (1) | 2024.01.08 |
<정리> 챌린지반 과제 2 (2) | 2024.01.08 |