코틀린에서의 예외 처리란?!(Kotlin in Action)
코틀린에서 예외처리를 하는 방법에 대해 알아보기 전에 우선 예외가 무엇인지 알려드리겠습니다!
예외(Exception)란?
1, 기본적으로 프로그램 실행 중 예측이 가능한 오류들을 이야기 합니다!
2, 코드가 진행되는 도중에 예외가 발생하게 되면 코드의 수행이 중단되게 됩니다!
이처럼 예외가 발생하게 된다면 프로그램이 중단 되어 버리기 때문에 이를 막고
예외 발생 시 동작해야 하는 코드를 수행시켜 프로그램이 문제없이 동작하게 하기 위한 목적을 가진 것이 예외 처리입니다!
#예외와 오류를 같다고 생각하실 수도 있는데(저도 이 책을 읽기 전까진 그런 줄 알았습니다,,)
예외란 프로그램의 정상적인 흐름을 방해하는 것이라면
오류는 프로그램이 더이상 진행될 수 없는 심각한 상태임을 나타냅니다!
try, catch, finally?!?
코틀린에선 이러한 예외처리를 위해 try, catch, finally와 같은 키워드를 가지고 있습니다
1, try : 개발자가 구현하는 코드 부분입니다 (주로 예외가 발생할 확률이 있는 코드를 작성합니다)
2, catch : try부분에서 예외가 발생했을 경우 예외를 처리해주는 부분입니다.
3, finally : 예외가 발생하거나 또는 정상적으로 작동 했을 때 모두 처리해야 하는 부분입니다!
try
{
// 예외가 발생할 만한 코드를 작성
}
catch
{
// 예외가 발생할 때 처리해야 할 코드 블록
}
finally
{
// 예외가 발생하거나 정상일 때 모두 처리해야 할 코드 블록
}
기본적인 예시는 위의 코드처럼 나타낼 수 있습니다!
※자바와의 차이점은??
Kotlin In Action을 읽어보니 자바에서의 예외처리와 코틀린에서의 예외처리를 설명해주는 부분이 있었습니다!
(물론 자바를 배워본 적이 없기 때문에 완벽하게 이해를 하진 못했지만 둘의 차이점은 파악할 수 있었습니다!)
1, Checked Exception 처리의 강제성
● 자바의 경우 Checked Exception을 발생 시키는 메서드를 호출할 때는 반드시 예외를 처리해야 합니다
● 하지만 코틀린의 경우 예외처리가 강제되지 않기 때문에 예외 처리를 하지 않더라도 컴파일 에러가 발생하지 않습니다!
2, Checked Exception vs Unchecked Exception
● 자바에서는 Checked Exception과 Unchekced Exception으로 구분되는데 1번에서의 설명과 같이 Checked Exception은 반드시 예외 처리를 해줘야 하고 Unchekced Exception은 예외 처리를 강제하지 않습니다!
● 하지만 코틀린의 경우 Checked Exception의 개념이 없으며 모든 예외 처리는 Unchecked Exception으로 취급합니다!
예외처리 사용 예시!
fun main() {
var study = 2
try {
val str = study.toInt() // 문자열을 정수로 변환 시도
println("우리는 안드로이드 스쿨 ${str}기 입니다")
}catch (e: Exception){ // 정수로 변환할 수 없는 형식의 문자열에 대한 예외 처리
println("예외 발생 : 숫자로 변환할 수 없습니다!")
}
finally {
println("앱스쿨이 마칠 때까지 파이팅입니다!")
}
}
위처럼 코드를 작성 했을 땐
study 변수에 정수값인 2를 넣어 주었고
try{} 안에서 str 변수에 받는 타입을 정수 타입으로 주었기 때문에
예외 처리가 발생하지 않고
try의 내부 코드와 finally의 내부 코드가 정상적으로 작동을 합니다.
fun main() {
var study = "안녕하세요"
try {
val str = study.toInt() // 문자열을 정수로 변환 시도
println("우리는 안드로이드 스쿨 ${str}기 입니다")
}catch (e: Exception){ // 정수로 변환할 수 없는 형식의 문자열에 대한 예외 처리
println("예외 발생 : 숫자로 변환할 수 없습니다!")
}
finally {
println("앱스쿨이 마칠 때까지 파이팅입니다!")
}
}
하지만 이렇게 작성을 한다면
study 변수에 문자열을 넣어 주었고
try{} 안에서 str 변수에 받는 타입을 정수 타입으로 주었기 때문에
예외 처리가 발생하게 되어
try의 내부 코드는 동작하지 않고 catch의 내부 코드인 예외처리와
finally 내부의 코드가 동작하게 됩니다!
느낀점
: 이번에 국비지원 프로그램만으로는 한계를 느끼게 되어 스터디를 만들게 되었고 다행히도 많은 분들께서
지원을 해주셔서 함께 스터디를 진행하게 되었습니다!
처음으로 책을 활용해서 공부를 해보았는데 음,,,아직은 책이 많이 어렵게 느껴지는 건 사실입니다
부트캠프의 특성상 시간이 넉넉하지 않기 때문에 기본적인 내용들을 탄탄하게 다지고 넘어가지 못하기도 하고
저는 프로그래밍 언어를 처음 배우다 보니 아직 익숙하지 못해서 어렵게 느껴지는 것 같기도 합니다
그래도 매주 이렇게 스터디룸에서 다 같이 모여 일주일동안 Kotlin In Action에서 공부할 부분을 나누고
서로 발표도 하고 피드백도 주다보면 더 탄탄하게 성장할 수 있는 기회가 될 수 있을 거 같습니다!