반응형
기본 베이스 코드
fun inline() {
try {
throw Exception("inline exception")
throw NullPointerException("inline exception")
}
catch(e: NullPointerException) {
println("inline에서 null pointer exception발생!!")
}
catch(e: Exception){
println("inline에서 exception발생!!")
}
}
@Test
fun outline() {
try {
inline()
} catch(e: NullPointerException) {
println("outline에서 null pointer exception발생!!")
} catch(e: Exception) {
println("outline에서 exception발생!!")
}
}
outline()은 그대로 두고 inline을 조정하여 에러를 발생시킨다.
Case 1.
throw Exception
catch npe, e 둘 다 잡음
result : inline에서 exception발생!!
fun inline() {
try {
throw Exception("inline exception")
}
catch(e: NullPointerException) {
println("inline에서 null pointer exception발생!!")
}
catch(e: Exception){
println("inline에서 exception발생!!")
}
}
Case 2.
throw Exception
catch epe만 잡음
result : outline에서 exception발생!!
fun inline() {
try {
throw Exception("inline exception")
}
catch(e: NullPointerException) {
println("inline에서 null pointer exception발생!!")
}
}
Case 3.
throw NullPointerException
catch epe만 잡음
result : inline에서 null pointer exception발생!!
fun inline() {
try {
throw NullPointerException("inline exception")
}
catch(e: NullPointerException) {
println("inline에서 null pointer exception발생!!")
}
}
Case 4.
throw NullPointerException
catch e만 잡음
result : inline에서 exception발생!!
fun inline() {
try {
throw NullPointerException("inline exception")
}
catch(e: Exception){
println("inline에서 exception발생!!")
}
}
결론 :
- exception에 대한 catch는 어느 곳이건 한 군데에서만 잡힌다.
- inline에서 exception처럼 큰 카테고리로 exception을 잡을 경우 outline에서 catch하지 못한다.
왜 exception을 세밀하게 잡아야 하는지에 대한 근거 자료로써 활용가치가 있다.
반응형
댓글