티스토리 뷰

JAVA, Kotlin

[Kotlin] 예외 처리

UDUD 2023. 4. 9. 18:34
반응형

Exception classes

코틀린에서 모든 예외 클래스는 Throwable 클래스를 상속받고 있습니다.

모든 예외 클래스는 메시지, 스택 트레이스, optional cause를 가지고 있습니다.

예외 객체를 던지기 위해서는 throw 식을 사용합니다.

fun main() {
    throw Exception("Hi There!")
}

위 코드를 실행시키면 아래와 같이 예외가 발생됩니다.

Hi There이라는 메시지를 주고, 어느 위치에서 오류가 발생했는지 스택 트레이스를 보여줍니다.

Exception in thread "main" java.lang.Exception: Hi There!
 at FileKt.main (File.kt:2) 
 at FileKt.main (File.kt:-1) 
 at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (:-2)

throw로 던져진 예외 객체를 잡기 위해서 try - catch 식을 사용합니다.

try {
    // 블라블라~~ 사용하고 싶은 코드 작성
} catch (e: SomeException) {
    // 예외 처리 하는 부분
} finally {
    // 선택적인 finally 부분
}

try는 필수이고 catch 문은 0개이거나 여러개가 될 수도 있고 finally 문은 없을수도 있습니다.

그렇지만 catch나 finally 둘 중 하나는 필수로 필요합니다.

 

Try is an expression ( = Try 는 식 )

Java와 다르게 Kotlin에서 Try는 식이기 때문에 결과값을 반환할 수 있습니다.

val a: Int? = try { input.toInt() } catch (e: NumberFormatException) { null }

input이 5라고 가정하고 input.toInt()를 했을 때 결과 값인 5가 a 변수에 할당되고,

input이 "안녕"이라고 가정하고 input.toIng()를 했을 때는 NumberFormatException오류에 걸려 catch문으로 들어가게 되어 null값이 a 변수에 할당됩니다.

 

The Nothing type

Java와 다르게 Kotlin에서는 throw도 식이고, 이때 throw의 타입은 Nothing 입니다.

엘비스 연산자 ?: 를 이용해서 person.name의 값이 null 일 경우 예외를 던집니다.

val s = person.name ?: throw IllegalArgumentException("Name required")

위 코드처럼 사용하는 일이 제일 많은 것 같..

 

반응형

'JAVA, Kotlin' 카테고리의 다른 글

[Kotlin] Null 안정성, Null 처리 방법  (0) 2023.04.01
@Resource, @Autowired, @Inject 차이  (0) 2021.11.01
람다 Lambda 란?  (0) 2021.06.23
컴파일러 vs 인터프리터  (0) 2021.03.04
== 와 equals 차이?  (0) 2021.03.03
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함