[Kotlin][언어공부-9] 예외처리

2020. 6. 25. 10:54Android/Kotlin

 

 

Kotlin도 자바와 같이 try catch를 사용한다.

 

그런데 kotlin은 자바와는 조금 다른 정책을 가지고 있는데 코틀린은 try catch를 별로 안좋아한다.

 

자바에서는 Checked Exception이라고 하여 특정 코딩에서는 try catch를 해야하는 문법이 있다. 

Checked Exception 이라 하는데 예를 들어(Connection 연결 할 때 등) (Runtime Exception 은 반드시 안해줘도 x 실행 때 에러잡힘)

 

반면 타 언어들은 try catch 를 강제하는 경우가 극히 드물었는데 자바는 강제를 하였다.

 

좋은 점은 있었는데 단점은 예외가 나오는 상황을 catch 로 잡아서 처리하는 버릇이 생겨서?? 가독 성이 떨어진다는 단점이 생겼다는 것 같다.

 

그래서 코틀린은 Checked Exception 을 강제하지 않고 프로그램 로직에서 예외처리를 권장하고 함수형 언어다보니까

null 체크가 무척 까다롭다. (자바는 NullPointerException) 

코틀린은 !!로 null 일때 종료한다던가 ? 로 뒤에부분을 실행하지 않는 방법이 있다.

 

 

 

내용을 요약하자면

1. Kotlin에서 try() catch 문은 필수가 아닌 선택. (자바의 checked Exception 처럼 필수가 아님)

2. 프로그래밍 로직에서 예외처리를 권장

3. null 체크가 까다롭다

4. !! null 일때 종료

5. ? 는 null 일때 뒤에 실행 X

 

 

 

코틀린의 Try Catch 문

 

  var divNumber = 0
    // try catch 사용 부분
    try{
        //숫자를 0으로 나누면 Exception 발생
            707/divNumber
    } catch (e : Exception) {
        println(e)
    } finally {
        //자바와 마찬가지로 최종으로 반드시 실행되는 finally
        println("Last")
    }

결과:

 

0으로 나누는 것은 runTimeException 이라 자바에서도 굳이 try catch 를 안써줘도 된다. 

자바에서 반드시 try catch 를 사용해야하는 클래스인 File 클래스를 이용해서 자바와 코틀린의 try catch 를 알아보자.

 

 

 

 

 

 

 

 

 

자바에서 반드시 예외체크를 해줘야하는 Checked Exception

  public static void main(String[] args) {
        File file = new File("");
        PrintWriter pw = new PrintWriter(file);

    }

자바에서 위와 같이 코딩하면 

 

위와 같이 에러가 뜨고 Alt+Shilft+Enter 를 눌러보면

throws를 던지거나 try/catch를 해주어야 한다는걸 알 수 있다. 이처럼 반드시 코드에서 예외체크를 해주어야하는 것을 Checked Exception 이라 한다.

 

 

 

반면 코틀린에서는 반드시 예외처리를 할 필요가 없다.

 

위의 자바 코딩을 코틀린으로 코딩하면 아래와 같은데 자바와 달리 에러표시가 안뜬다.

    val f = File("")
    val pw = PrintWriter(f)

실행 했을 때 Runtime Exception 처리를 자동으로 해주는 느낌이다.

실행 된거를 확인해보자

콘솔에 에러가 찍히는걸 확인 할 수 있다.

 

 

 

코틀린의 Null Check

 

 var addNumber : Int? = null
    var sum = addNumber + 100

위에 코드는 null 이뜨는데 이유는 addNumber 는 null 이 들어갈 수 있는데

var sum = null + 100 이 된다면 null 처리가 안되서 오류가 발생하기 때문이다.

오류가 발생한다.

이를 로직적으로 처리해보자

 

1. 로직으로 처리

 

   //var sum = addNumber + 100
    //위에 애는 에러
    if(addNumber != null){
        var sum = addNumber + 100
    }
    //근데 로직 적으로 null 을 막아주면 에러가 안뜬다.

 

2. !!를 이용한 종료 처리

 

 //!!를 이용한 종료 처리
    //addNumber가 0 이면 프로그램이 죽는다.
    var sum = addNumber!! + 100

 

프로그램이 죽는다?? 어떻게 되는지 보기 위해 실행해보자

에러를 뱉으면서 프로그램이 종료된다.

 

 

3. ?를 이용한 실행 x 처리

 

?를 사용할려면 함수형 프로그래밍을 먼저 알아야하는데

    var sum = addNumber?.let{ it + 100 }

여기서는 ?를 위해서 간단하게만 설명하자면 let 함수는 결과를 (it) 넘겨서 함수를 실행하는 함수이다.

 

 여기서 addNumber가 정상동작 한다면 let 함수가 실행되어서 it+100 이 정상동작하여 sum 에 값이 들어갈텐데

?때문에 let 함수가 동작하지 않는다.

그러면 var sum의 값은 null 이 된다.

 

 

반응형

'Android > Kotlin' 카테고리의 다른 글

[Kotlin][언어공부-8] Collection  (0) 2020.06.23
[Kotlin][언어공부-7] label  (0) 2020.06.22
[Kotlin][언어공부-6] 제어문  (1) 2020.06.18
[Kotlin][언어공부-5] function  (0) 2020.06.16
[Kotlin][언어공부-4] Any형  (0) 2020.06.10