공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
Exceptions : 예외
Exception Classes
코틀린의 모든 예외 클래스는 Throwable 의 하위에 있습니다.
그리고 모든 예외는 Message, stacktrace, cause 멤버를 가집니다.
예외 객체를 throw 하려면 throw-expression을 사용하면 됩니다.
throw Exception("Hello world")
예외를 잡을 때는 try-catch 문을 씁니다. finally {}는 옵션입니다.
try {
} catch (e : Exception) {
e.message
} finally {
}
Try is an expression
try 는 expression 입니다 즉, 반환 값을 가집니다.
val tc = try{ println("hello world") } catch (e : Exception) { null }
반환되는 값은 try {} 블록 안의 가장 마지막 코드이거나, catch{} 블록 안의 가장
마지막 코드입니다.
Checked Exceptions
코틀린은 예외를 체크하지 않습니다. 여러가지 이유가 있지만,
간단한 예제를 보겠습니다.
아래는 StringBuilder 클래스로 구현된 JDK 인터페이스 예제입니다.
Appendable append(CharSequence csq) throws IOEcxception;
위 코드는 무엇을 의미할까요?
어떠한 CharSequence를 append 할 때마다 IOException을 잡아야 한다는 것입니다.
때문에 StringBuilder 클래스의 append 메서드를 사용하려면
try { ... } catch(IOException ioe) { ... } 으로 감싸야 합니다.
그리고 이 코드는 좋지 않다고 Effective Java, Item65 : Don't ignore eceptions.
에서 말하고 있습니다.
Bruce Eckel은 '자바가 Checked Exceptions 를 필요로 하는가?' 라고 말합니다.
[ 소규모의 프로그램을 검토했을 때에는 Checked Exceptions 를 하면 코드의 품질이
향상되고 개발자의 생성성도 좋아지지만, 대규모 프로젝트에서 봤을 때는 생산성의
저하나 품질의 향상이 거의 없음을 의미합니다. ]
또 다른 인용문들
- http://radio-weblogs.com/0122027/stories/2003/04/01/JavasCheckedExceptionsWereAMistake.html
- http://www.artima.com/intv/handcuffs.html
The Nothing type : Nothing 타입
코틀린에서 expression 입니다. 때문에 아래처럼 사용할 수 있습니다.
fun main(args: Array<String>) {
val person = Person(null)
val tc = person.name ?: throw IllegalArgumentException("Name required")
print(tc)
}
data class Person(val name : String?)
throw expression의 타입은 특별한 타입인 Nothing 입니다.
이 타입은 값이 없고, 절대 도달할 수 없는 코드 위치를 표시하는데 사용됩니다.
Nothing 타입은 메서드의 반환 타입으로 사용할 수도 있습니다.
fun whenFailed() : Nothing {
throw IOException("name required")
}
이 메서드를 호출하면 컴파일러는 컴파일러는 더 이상 진행하면 안된다는 것을 알게 됩니다.
Nothing 타입이 나올 수 있는 또 다른 경우는 변수의 타입을 유추할 때 입니다.
val x = null
println((x is Nothing?))
val l = listOf(null)
print(l)
위 두 경우에
x 는 Nothing? 타입이 되고
l 은 List<Nothing?> 타입이 됩니다.
각 실행 결과는
true
[null] 입니다.
이상입니다.
다음 포스팅에서는 Annotation 에 대해서 공부합니다.
감사합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : how to use java.util.Scanner in Kotlin / 코틀린에서 자바 Scanner 클래스 사용 방법 (0) | 2018.02.10 |
---|---|
코틀린(kotlin) : Annotations 어노테이션 (0) | 2018.02.09 |
코틀린(kotlin) : Null Safety 널 세이프티 (2) | 2018.02.08 |
코틀린(kotlin) : 단항 연산자, 이항연산자, 여러 연산자 (0) | 2018.02.08 |
코틀린(kotlin) : this 와 Equality (0) | 2018.02.08 |