class Main {
fun readNumber(reader: BufferedReader): Int? {
return try {
val line = reader.readLine()
Integer.parseInt(line)
} catch (e: NumberFormatException) {
null
} finally {
reader.close()
}
}
}
- 자바와 달리 함수가 던질 수 있는 예외 명시하지 않아도 된다.
- 체크 예외
- 언체크 예외를 구분하지 않는다.
- 발생한 예외를 잡아내거나 잡아내지 않아도 됨
NumberFormatException
은 언체크 예외- 코틀린은 잡아내도록 강제 X
BufferedReader
의 경우IOException
을 던질 수 있는데, 체크 예외
- 자바에서는 반드시 처리해야한다.
- 코틀린에서는?
- 명시적으로 처리하지 않아도 된다.
개발자가 예외를 처리하기보단, 회피하려는 경향을 불러일으킬 수 있기에 체크예외에 대해 별도 처리를 강제하지 않음,.
- 또한 자바 → 코틀린
- 마이그레이션시 더 코드를 간단하게 마이그레이션이 가능함
Try 를 식으로 사용하는 법
if
나when
같이 결과 값을 반환가능하다.
- try 식의 결과 값은 try블록의 마지막 식
- 혹은
- catch 블록의 마지막 식이다.
fun main() {
//시스템에서 입력받기
val reader = BufferedReader(System.`in`.reader())
readNumber(reader)
}
private fun readNumber(reader: BufferedReader) {
val number = try {
val line = reader.readLine()
Integer.parseInt(line)
} catch (e: NumberFormatException) {
null
}
println("number: $number")
}
123123
number: 123123
위 코드에서 try
블록은 BufferedReader
로부터 한줄을 읽고..
이를 정수로 변환하려고 시도한다.
만약 변환 과정에서 NumberFormatException
이 발생하면 catch
블록이 실행되고, null
이 반환.
그리고 println
함수를 통해 결과를 출력
try
식을 사용하면 다음과 같은 이점이 있습니다:
- 코드 간결성
try
식을 사용하면 예외 처리 로직을 더 간결하게 표현할 수 있다.
- 값 반환
-
try
블록과catch
블록 모두에서 값을 반환할 수 있으므로, 함수의 반환 값으로 직접 사용할 수 있다.
-
- 제어 흐름
- 예외가 발생해도 프로그램의 나머지 부분이 계속 실행될 수 있도록 제어 흐름을 관리할 수 있음.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[KOTLIN] 함수 정의와 호출 (0) | 2024.02.08 |
---|---|
[KOTLIN] 컬렉션 (0) | 2024.02.08 |
[코틀린인액션] 상속 제어 변경자 (0) | 2023.12.17 |
[코틀린인액션] 가시성 변경자 및 접근 제어 (0) | 2023.12.17 |
[코틀린인액션] 코틀린과 자바의 내부 클래스와 중첩 클래스 (0) | 2023.12.17 |