KOTLIN · 예외처리
예외 vs 반환값 선택 기준
예외와 반환값(Result/Either) 중 적절한 에러 처리 방식을 선택하는 기준을 다룹니다.
예외처리중급exceptionresulterror-strategysealed-class
핵심 설명
예외와 반환값(Result/Either) 중 적절한 에러 처리 방식을 선택하는 기준을 다룹니다.
Kotlin code
// 예외 사용: 예측 불가능한 실패, 프로그래밍 오류
fun readConfig(path: String): Map<String, String> {
require(path.isNotEmpty()) { "경로가 비어있습니다" }
// 파일이 없으면 예외 (인프라 문제)
return mapOf("key" to "value")
}
// Result 사용: 예측 가능한 실패, 비즈니스 규칙
fun validateAge(input: String): Result<Int> = runCatching {
val age = input.toInt()
require(age in 1..150) { "유효하지 않은 나이: $age" }
age
}
// sealed class 사용: 여러 실패 케이스
sealed class LoginResult {
data class Success(val token: String) : LoginResult()
data class WrongPassword(val attempts: Int) : LoginResult()
data object AccountLocked : LoginResult()
data object UserNotFound : LoginResult()
}
fun login(id: String, pw: String): LoginResult = when {
id != "admin" -> LoginResult.UserNotFound
pw != "1234" -> LoginResult.WrongPassword(1)
else -> LoginResult.Success("token-xyz")
}
fun main() {
// 각 방식의 처리
when (val result = login("admin", "wrong")) {
is LoginResult.Success -> println("토큰: ${result.token}")
is LoginResult.WrongPassword -> println("비밀번호 오류 (${result.attempts}회)")
LoginResult.AccountLocked -> println("계정 잠금")
LoginResult.UserNotFound -> println("사용자 없음")
}
}학습 팁
일반적으로: 프로그래밍 오류 → 예외, 비즈니스 규칙 → sealed class/Result, 외부 시스템 → Result/try-catch로 구분합니다.
주의할 점
비즈니스 로직에서 예외를 제어 흐름으로 남용하면 성능이 저하되고 코드가 복잡해집니다. 예측 가능한 실패에는 반환값을 사용하세요.
자주 묻는 질문
예외 vs 반환값 선택 기준란 무엇인가요?
예외와 반환값(Result/Either) 중 적절한 에러 처리 방식을 선택하는 기준을 다룹니다.
예외 vs 반환값 선택 기준 학습 시 주의할 점은 무엇인가요?
비즈니스 로직에서 예외를 제어 흐름으로 남용하면 성능이 저하되고 코드가 복잡해집니다. 예측 가능한 실패에는 반환값을 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.