학습
Kotlin 고급 예외 처리
Kotlin 고급 예외 처리 — 중급
고급 예외 처리
1. 도입 (왜 배워야 하는가)
예외 처리는 소프트웨어 개발에서 필수적인 요소입니다. 실무에서는 예상치 못한 오류가 발생할 수 있으며, 이를 적절히 처리하지 않으면 프로그램이 중단되거나 사용자에게 불편을 초래할 수 있습니다. 예를 들어, 쇼핑몰에서 결제 시스템이 오류를 일으키면 고객이 장바구니를 비워버리거나 결제를 하지 못하는 상황이 발생할 수 있습니다. 이와 같은 문제를 피하기 위해 고급 예외 처리 기술을 습득하는 것이 중요합니다.
예외 처리를 잘못하면 프로그램의 안정성을 해칠 뿐만 아니라, 디버깅과 유지보수에도 큰 어려움을 겪게 됩니다. 따라서 고급 예외 처리 기법을 배우는 것은 안정적이고 신뢰할 수 있는 소프트웨어 개발의 기본입니다.
2. 핵심 개념 설명
예외(Exception)
예외는 프로그램 실행 중 발생하는 오류입니다. 예를 들어, 파일을 열려고 시도했지만 파일이 존재하지 않는 경우 발생하는 상황을 생각할 수 있습니다.
처리(Handling)
예외를 처리하는 방법으로는 try, catch, finally 블록을 사용합니다. 이는 마치 안전망을 설치해 사고를 미연에 방지하는 것과 비슷합니다.
| 용어 | 설명 |
|---|---|
try | 예외가 발생할 수 있는 코드를 감싸는 블록. |
catch | 발생한 예외를 처리하는 블록. |
finally | 예외 발생 여부와 관계없이 항상 실행되는 블록. |
3. 기본 코드 예제
다음은 기본적인 예외 처리를 보여주는 코드입니다.
fun main() {
val number = "123a" // 숫자가 아닌 문자열
try {
val parsedNumber = number.toInt() // 예외 발생 가능성
println("Parsed number: $parsedNumber")
} catch (e: NumberFormatException) {
println("유효하지 않은 숫자 형식입니다: ${e.message}") // 예외 처리
} finally {
println("예외 처리 종료") // 항상 실행되는 블록
}
}
실행 결과:
유효하지 않은 숫자 형식입니다: For input string: "123a"
예외 처리 종료
val number = "123a": 숫자가 아닌 문자열을 정의합니다.try블록에 있는number.toInt()에서 예외가 발생할 수 있습니다.catch블록에서NumberFormatException을 잡아 오류 메시지를 출력합니다.finally블록은 예외 발생 여부와 관계없이 항상 실행됩니다.
4. 실전 활용 예제
예제 1: 파일 읽기
쇼핑몰에서 제품 정보를 파일에서 읽어오는 경우를 생각해봅시다.
import java.io.File
import java.io.FileNotFoundException
fun readProductFile(fileName: String) {
try {
val file = File(fileName)
val content = file.readText()
println("파일 내용: $content")
} catch (e: FileNotFoundException) {
println("파일을 찾을 수 없습니다: ${e.message}")
} finally {
println("파일 읽기 시도 완료")
}
}
예제 2: 데이터베이스 연결
데이터베이스에 연결할 때 발생할 수 있는 예외를 처리합니다.
import java.sql.Connection
import java.sql.DriverManager
import java.sql.SQLException
fun connectToDatabase(url: String) {
try {
val connection: Connection = DriverManager.getConnection(url)
println("데이터베이스에 연결되었습니다.")
} catch (e: SQLException) {
println("데이터베이스 연결 실패: ${e.message}")
} finally {
println("연결 시도 완료")
}
}
5. 흔한 실수와 주의사항
실수 1: 예외를 무시하기
try {
val num = "abc".toInt()
} catch (e: Exception) {
// 예외 처리 없음
}
잘못된 코드: 예외를 무시하면 프로그램이 예기치 않게 종료될 수 있습니다.
실수 2: finally 블록에 중요한 코드 넣기
try {
// 코드
} finally {
return // 잘못된 사용
}
올바른 코드: finally 블록에서 return을 사용하면 예외 발생 여부와 관계없이 메서드가 종료됩니다.
6. 정리
try, catch, finally를 사용해 예외를 적절히 처리할 수 있다.finally에서 return을 사용하는 것은 피해야 한다.다음에 학습하면 좋은 주제
Result 타입 활용