학습
Kotlin 기본적인 예외 처리
Kotlin 기본적인 예외 처리 — 초급
기본적인 예외 처리
1. 도입 (왜 배워야 하는가)
예외 처리는 프로그래밍에서 매우 중요한 개념입니다. 코드를 작성할 때는 예상치 못한 오류가 발생할 수 있으며, 이러한 오류를 적절하게 처리하지 않으면 프로그램이 중단되거나 잘못된 결과를 초래할 수 있습니다. 예를 들어, 쇼핑몰 애플리케이션에서 사용자가 장바구니에 상품을 추가할 때, 해당 상품의 재고가 부족하다면 프로그램은 오류를 발생시키고 사용자에게 적절한 피드백을 제공해야 합니다. 이 과정을 통해 사용자 경험을 향상시키고, 프로그램의 안정성을 높일 수 있습니다.
예외 처리를 모르면 프로그램이 비정상적으로 종료되거나, 사용자에게 불친절한 오류 메시지를 출력하여 신뢰를 잃을 수 있습니다. 따라서 예외 처리를 이해하고 활용하는 것은 개발자로서 필수적인 스킬입니다.
2. 핵심 개념 설명
예외 처리란 프로그램 실행 중 발생할 수 있는 오류를 처리하는 방법입니다. Kotlin에서는 try, catch, finally 블록을 사용하여 예외를 처리합니다.
- try: 예외가 발생할 가능성이 있는 코드를 포함합니다.
- catch: 발생한 예외를 처리하는 블록입니다.
- finally: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. 주로 자원 해제 등 필요한 작업을 수행하는 데 사용됩니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 예외 (Exception) | 프로그램 실행 중 발생할 수 있는 오류입니다. |
| 던지기 (Throw) | 특정 오류를 발생시키는 행위입니다. |
| 처리 (Handle) | 발생한 오류를 적절히 대응하는 과정입니다. |
3. 기본 코드 예제
가장 기본적인 예외 처리 방법을 보여주는 예제입니다.
fun main() {
val number = "123a" // 이 값은 숫자로 변환할 수 없는 문자열입니다.
try {
val result = number.toInt() // 문자열을 정수로 변환 시도
println("변환된 숫자: $result")
} catch (e: NumberFormatException) {
println("예외가 발생했습니다: ${e.message}") // 예외 발생 시 메시지 출력
} finally {
println("프로그램 종료") // 항상 실행되는 블록
}
}
실행 결과
예외가 발생했습니다: For input string: "123a"
프로그램 종료
코드 한 줄씩 동작 설명
val number = "123a": 변환할 문자열을 선언합니다. 이 문자열은 숫자가 아닙니다.try { ... }: 예외가 발생할 가능성이 있는 코드를 포함합니다.val result = number.toInt(): 문자열을 정수로 변환하려고 시도합니다. 하지만 "123a"는 숫자가 아니므로NumberFormatException이 발생합니다.catch (e: NumberFormatException) { ... }: 발생한 예외를 잡아 처리합니다. 예외 메시지를 출력합니다.finally { ... }: 예외 발생 여부와 관계없이 항상 실행됩니다. 여기서는 "프로그램 종료"라는 메시지를 출력합니다.- 예외 처리는 프로그램의 안정성을 높이는 중요한 기술입니다.
try,catch,finally블록을 사용하여 예외를 처리합니다.- 코드에서 예상치 못한 오류를 처리하는 방법을 배웠습니다.
- 다음에 학습하면 좋은 주제: 사용자 정의 예외 처리, Kotlin의
Result타입 사용법, 코틀린의 비동기 프로그래밍 예외 처리.
4. 실전 활용 예제
예제 1: 파일 읽기
쇼핑몰에서 상품 정보를 파일에서 읽어오는 경우를 생각해봅시다.
import java.io.File
import java.io.IOException
fun readFile(fileName: String) {
try {
val content = File(fileName).readText()
println("파일 내용: $content")
} catch (e: IOException) {
println("파일을 읽는 중 오류 발생: ${e.message}")
}
}
fun main() {
readFile("products.txt") // 존재하지 않는 파일을 읽으려 합니다.
}
예제 2: 사용자 입력
사용자에게 숫자를 입력받는 경우입니다.
fun main() {
println("숫자를 입력하세요:")
val input = readLine()
try {
val number = input!!.toInt() // 사용자가 입력한 값을 정수로 변환
println("입력한 숫자: $number")
} catch (e: NumberFormatException) {
println("잘못된 입력입니다. 숫자를 입력해주세요.")
}
}
5. 흔한 실수와 주의사항
실수 1: catch 블록을 생략하기
예외를 처리하지 않으면 프로그램이 중단됩니다.
fun main() {
val number = "123a"
val result = number.toInt() // 예외 발생
println(result) // 이 줄은 실행되지 않음
}
올바른 코드: try-catch를 추가하여 예외를 처리해야 합니다.
실수 2: finally 블록을 잊기
자원 해제를 위해 finally 블록을 사용하는 것을 잊지 마세요.
fun main() {
val file = File("file.txt")
try {
// 파일 작업
} catch (e: IOException) {
println("파일 처리 중 오류 발생")
}
// 파일 닫기 등 자원 해제 작업을 finally에서 수행해야 함
}