ValueEventListener가 콜백리스너입니다. 즉, 파이어베이스에서 이벤트가 발생할 때 님이 추가한 ValueEventListener를 통해 파이어베이스가 함수를 호출하는 겁니다. 결과적으로는 비동기로 동작을 하는 겁니다. 다만 ValueEventListener는 백그라운 스레드를 자동으로 메인스레드로 전환해주고 있네요. 모바일앱에서는 메인스레드 안에서만 뷰에 접근이 가능하거든요.
따라서 사용자이름의 로그를 출력하시려면 콜백 안에서 해야 합니다.
추가로 Firebase에는 이미 로그인한 현재 유저를 구할 수 있는 함수가 존재하는 걸로 압니다. 이걸 사용하시는 것이 좀 더 정확할 것 같구요. 코드에서 한두가지 수정했으면 좋을 것 같은 부분이 있는데,
FBAuth.getUid() == datamodel.key
코틀린에서 equals 비교는 == 입니다. 그런데 ==는 null safe 라 널과도 비교를 할 수 있기 때문에 Java의 equals보다 사용하기 편리합니다. 아마 안드로이드 스튜디오에서 equals위에서 마우스를 가져다 대시면 equals를 ==로 바꾸라는 힌트를 보실 수 있을 거예요.
currentUidNickname = snapshot.children.find { datamodel ->
FBAuth.getUid() == datamodel.key
}?.userName
위처럼 Collection의 Extension function을 사용하시면 좀 더 정확하게 원하는 엘리먼트를 찾을 수가 있습니다.
currentUidNickname = snapshot.children.find { datamodel ->
FBAuth.getUid() == datamodel.key
}?.userName ?: return handleUserNotFound()
private fun handleUserNotFound() {
}
사용자를 찾지 못하는 경우가 생길 수도 있으므로 여기에 대한 예외 처리를 하셔야 할 것 같습니다. 예외 처리는 안정적인 앱을 위해서 상당히 중요한 부분입니다.