본문 바로가기
Java

try ~ catch의 inline, outline 사이에 exception이 발생하는 case

by 루에 2020. 7. 15.
반응형

 

기본 베이스 코드

    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발생!!")
        }
    }

 

결론 :

  1. exception에 대한 catch는 어느 곳이건 한 군데에서만 잡힌다.
  2. inline에서 exception처럼 큰 카테고리로 exception을 잡을 경우 outline에서 catch하지 못한다.

 

왜 exception을 세밀하게 잡아야 하는지에 대한 근거 자료로써 활용가치가 있다.

반응형

댓글