🐱 With All My Animal 🐶
💡 [ 14일차 10/27일 ] 💡
📌 오늘의 기술면접 질문 Q&A
객체(Object)는 객체지향 프로그래밍(OOP)의 핵심 개념 중 하나이다.
객체는 상태와 행동을 통해 실제 세계의 개체를 코드 내에서 표현하게 되는데 이런 방식은 실제 세계의 복잡성을 관리 가능한 수준으로 단순시키는데 도움을 준다.
각 객체는 독립된 엔티티로, 특정 상태와 행동을 캡슐화하여 그 상태와 행동이 외부에 노출되지 않도록 보호하는 특징도 가지고 있다.
객체는 상태(State)와 행동(Behavior)를 가진다.
🌺 상태(State): 객체의 상태는 그 객체가 가지고 있는 속성 값으로 구성된다.
예시)
'자동차'라는 객체가 있다면 그 상태는 자동차의 색상/모델/브랜드 등으로 나타낼 수 있다.
🌺 행동(Behavior): 객체의 행동은 그 객체가 수행할 수 있는 작업을 나타낸다.
예시)
'자동차' 객체의 경우, 달리기/멈추기/방향 전환하기 등이 그 행동이 될 수 있다.
📌 NullPointerException 수정
Mypage에서 유저의 프로필을 불러오는 과정에서 NullPointerException이 발생했다.
프로필을 변경하면 재시작을 해야 프로필이 적용되는 오류도 있었다.
이것 저것 시도해보았지만 해결 방안이 보이지 않아서 튜터님께 여쭤보았는데 튜터님이 주신 해결 방안은 다음과 같다.
1) 튜터님이 주신 예시 코드를 적용해보기(예제 코드에 좀 더 덧붙여서 수정해야함)
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (isAdded && !isDetached && !isRemoving) {
// Fragment가 활성 상태임
// 원하는 작업 수행
}
}
2) 정보 불러오는 방법을 바꿔보기
3) 파이어베이스 캐싱하는 방법도 찾아보기
-> 나는 이 방법 중에서 1번을 선택해서 변경해보았다.
private fun loadUserData() {
val userId = Firebase.auth.currentUser?.uid
if (userId != null) {
userProfileRef =
FirebaseDatabase.getInstance().getReference("users").child(userId).child("profile")
valueEventListener = userProfileRef.addValueEventListener(object : ValueEventListener {
// 추가된 부분
override fun onDataChange(snapshot: DataSnapshot) {
if (isAdded && !isDetached && !isRemoving) {
val userIdname = snapshot.child("userIdname").getValue(String::class.java)
val petName = snapshot.child("petName").getValue(String::class.java)
val birth = snapshot.child("birth").getValue(String::class.java)
// val statsMessage = snapshot.child("statusMessage").getValue(String::class.java)
binding.tvMypage.text = petName
binding.tvMypageNickname.text = userIdname
binding.tvMypageBirth.text = birth
// binding.tvMypageMessage.text = statsMessage
}
}
override fun onCancelled(error: DatabaseError) {
Log.e("MypageFragment", "Error loading user data: ${error.message}")
}
})
}
}