Moblie/Android
AndroidStudio/kotlin/Custom Exception
youngyin
2022. 7. 10. 10:00
개요
firebase를 통한 로그인 서비스를 구현하던 중에 uid 값이 들어오지 않는 문제가 발생했다.
우선, uid값에 null 값이 들어오면 테스트 계정의 uid를 연결하도록 코드를 작성했다.
class ReadUserRequest : BaseRequest() {
override val TAG = "ReadUserRequest"
private val DATA_PATH = "Users"
override fun request() {
val uid = AppApplication().getUid()
FirebaseDatabase.getInstance()
.reference
.child(DATA_PATH)
.child(uid!!)
.get()
.addOnSuccessListener {
val result = it.getValue(UserResponse::class.java)
mlistener?.onRequestSuccess(result as Object)
}
.addOnFailureListener {
mlistener?.onRequestFail()
Log.e(TAG, it.toString())
}
}
}
// AppApplication
fun getUid() : String {
var uid = FirebaseAuth.getInstance().currentUser?.uid
if(uid == null) {
uid = "...."
}
return uid!!
}
이렇게 처리한 경우, uid가 없다는 사실을 어떻게 알릴 수 있을까를 고민하다가, custom Exception을 사용했다.
예제
// AppApplication
fun getUid() : String{
if (uid!=null) return uid!!
var uid = FirebaseAuth.getInstance().currentUser?.uid
try {
if(uid == null) {
// 우선 throw error 던지도록 처리
throw CanNotFindUidError()
}
} catch (e : CanNotFindUidError){
/**
* 지금 uid 값이 안들어옴 나중에 여기 처리해야 함
*/
uid = "M8mYC1eUs6RqEUrxTj7mARW3dK72"
Log.e(TAG, e.stackTraceToString())
}
return uid!!
}
// CanNotFindUidError
class CanNotFindUidError : Exception() {
override val message: String?
get() = "firebase uid를 찾을 수 없습니다."
}
Exception
예외 처리 목적
이러한 예외를 활용하여 개발자와 사용자에게 오류발생을 알릴 수 있다. 예를 들어 유효하지 않은 경로로 진입한 경우, 사용자에게 다이얼 로그를 띄운다던가, 다음에 실행되어야 할 행동을 정의할 수 있다.
Java Exceptions Hierarchy
위 예제에서는 Exception을 사용했지만, RuntimeException을 사용할 수도 있다.
Checked Exception (Exception) |
Unchecked Exception (RuntimeException) |
|
처리여부 | 반드시 예외 처리를 해야 함 | 명시적 처리를 강제하지 않음 |
확인시점 | 컴파일 단계 | 실행 단계 |
예외처리방법
복구 | 예외 발생 시 직접 처리함 |
회피 | 예외를 직접 처리하지 않고 호출한 곳에서 처리하도록 함 |
전환 | 적절한 예외로 변경하여 발생한 예외를 직접 처리하지 않고 호출한 곳에서 처리하도록 함 |