+ 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다.
예외 던지기
- 함수의 비정상적인 상황 발생 시 throw 문을 통하여 예외를 던질 수 있다. (예외를 받지 않으면 비정상 종료)
fun main() {
val str = "10110110"
println(parseIntNumberInBinary(str)) // 182
}
// 2진수 문자열을 입력 받아 10진수로 변환 후 반환하는 함수
fun parseIntNumberInBinary(s: String): Int {
var num = 0
if (s.length !in 1 .. 31) throw NumberFormatException("Not a Number: $s")
// String s의 길이가 1 ~ 31 범위가 아니라면 s는 Int형 범위를 벗어나므로 예외 throw
for (c in s) {
if (c !in '0' .. '1') throw NumberFormatException("Not a Number: $s")
// 0, 1로만 이루어져 있는 문자열이 아닌 경우 예외 throw
num = num * 2 + (c - '0')
// c - '0': c가 '1'이라면 1, '0'이라면 0
// 현재까지 s로부터 받은 c들을 계산한 값에 2를 곱하고 현재 c를 더하는 방식
}
return num
}
try-catch 문으로 예외 처리하기
- 안에서 던진 예외를 try-catch 문으로 처리할 수 있다.
- 던져진 예외가 try-catch 문으로 처리되지 않으면 프로그램이 예외로 비정상 종료된다.
fun main() {
val string = readInt(1000)
println(string)
}
// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int): Int {
try {
return readLine()!!.toInt()
}
catch (e: java.lang.NumberFormatException) {
// 위 try문 내에서 NumberFormatException 발생 시 (숫자가 아닌 것 입력)
return default // default 값 반환
}
}
- pdf 코드 오류: int => Int
try-catch 문을 식처럼 이용하기
- if 문처럼 try-catch문도 식처럼 사용할 수 있다.
fun main() {
val string = readInt(1000)
println(string)
}
// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int) = try {
readLine()!!.toInt() // return 생략
} catch (e: java.lang.NumberFormatException) {
default // return 생략
}
finally 구문을 통해서 자원 정리 하기
- finally 구문에 있는 문장들은 예외 발생 여부와 관계없이 무조건 수행된다. (try - (catch) - finally)
- try 구문 안에서 사용한 자원을 정리할 때 유용하다. (프로그램이 종료될 때 꼭 실행되어야 하는 코드)
fun main() {
val string = readInt(1000)
println(string)
}
// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int) = try {
readLine()!!.toInt() // return 생략
} finally {
println("자원 정리")
}'Study > Kotlin Study' 카테고리의 다른 글
| [Kotlin] 함수 (4) | 2023.09.03 |
|---|---|
| [Kotlin] 클래스 정의하기 (1) | 2023.08.28 |
| [Kotlin] 루프 (반복문) (2) | 2023.08.24 |
| [Kotlin] 조건문 (2) | 2023.08.23 |
| [Kotlin] 패키지: 패키지 개요 (2) | 2023.08.22 |