스터디 정리!

코틀린에서의 예외 처리란?!(Kotlin in Action)

SeongukHeo11 2024. 3. 1. 02:59

코틀린에서 예외처리를 하는 방법에 대해 알아보기 전에 우선 예외가 무엇인지 알려드리겠습니다!

 

예외(Exception)란?
1, 기본적으로 프로그램 실행 중 예측이 가능한 오류들을 이야기 합니다!
2, 코드가 진행되는 도중에 예외가 발생하게 되면 코드의 수행이 중단되게 됩니다!


 

이처럼 예외가 발생하게 된다면 프로그램이 중단 되어 버리기 때문에 이를 막고

예외 발생 시 동작해야 하는 코드를 수행시켜 프로그램이 문제없이 동작하게 하기 위한 목적을 가진 것이 예외 처리입니다!

 

 

#예외와 오류를 같다고 생각하실 수도 있는데(저도 이 책을 읽기 전까진 그런 줄 알았습니다,,) 
예외란 프로그램의 정상적인 흐름을 방해하는 것이라면

오류는 프로그램이 더이상 진행될 수 없는 심각한 상태임을 나타냅니다!

 

 

 

try, catch, finally?!?
코틀린에선 이러한 예외처리를 위해 try, catch, finally와 같은 키워드를 가지고 있습니다



1, try : 개발자가 구현하는 코드 부분입니다 (주로 예외가 발생할 확률이 있는 코드를 작성합니다)

2, catch : try부분에서 예외가 발생했을 경우 예외를 처리해주는 부분입니다.

3, finally : 예외가 발생하거나 또는 정상적으로 작동 했을 때 모두 처리해야 하는 부분입니다!

 

try
{
	// 예외가 발생할 만한 코드를 작성
}
catch
{
	// 예외가 발생할 때 처리해야 할 코드 블록
}
finally
{
	// 예외가 발생하거나 정상일 때 모두 처리해야 할 코드 블록
}

 

기본적인 예시는 위의 코드처럼 나타낼 수 있습니다!

 

※자바와의 차이점은??

Kotlin In Action을 읽어보니 자바에서의 예외처리와 코틀린에서의 예외처리를 설명해주는 부분이 있었습니다!

(물론 자바를 배워본 적이 없기 때문에 완벽하게 이해를 하진 못했지만 둘의 차이점은 파악할 수 있었습니다!)

 

1, Checked Exception 처리의 강제성

●  자바의 경우 Checked Exception을 발생 시키는 메서드를 호출할 때는 반드시 예외를 처리해야 합니다

●  하지만 코틀린의 경우 예외처리가 강제되지 않기 때문에 예외 처리를 하지 않더라도 컴파일 에러가 발생하지 않습니다!

 

2, Checked Exception vs Unchecked Exception

●  자바에서는 Checked Exception과 Unchekced Exception으로 구분되는데 1번에서의 설명과 같이 Checked Exception은 반드시 예외 처리를 해줘야 하고 Unchekced Exception은 예외 처리를 강제하지 않습니다!

●  하지만 코틀린의 경우 Checked Exception의 개념이 없으며 모든 예외 처리는 Unchecked Exception으로 취급합니다!

 

 

예외처리 사용 예시!

fun main() {
    var study = 2

    try {
        val str = study.toInt() // 문자열을 정수로 변환 시도
        println("우리는 안드로이드 스쿨 ${str}기 입니다")

    }catch (e: Exception){ // 정수로 변환할 수 없는 형식의 문자열에 대한 예외 처리
        println("예외 발생 : 숫자로 변환할 수 없습니다!")

    }
    finally {
        println("앱스쿨이 마칠 때까지 파이팅입니다!")
    }
}

위처럼 코드를 작성 했을 땐

study 변수에 정수값인 2를 넣어 주었고

try{} 안에서 str 변수에 받는 타입을 정수 타입으로 주었기 때문에

예외 처리가 발생하지 않고 

try의 내부 코드와 finally의 내부 코드가 정상적으로 작동을 합니다.

위 코드 출력!

 

 

 

fun main() {
    var study = "안녕하세요"

    try {
        val str = study.toInt() // 문자열을 정수로 변환 시도
        println("우리는 안드로이드 스쿨 ${str}기 입니다")

    }catch (e: Exception){ // 정수로 변환할 수 없는 형식의 문자열에 대한 예외 처리
        println("예외 발생 : 숫자로 변환할 수 없습니다!")

    }
    finally {
        println("앱스쿨이 마칠 때까지 파이팅입니다!")
    }
}

하지만 이렇게 작성을 한다면

study 변수에 문자열을 넣어 주었고

try{} 안에서 str 변수에 받는 타입을 정수 타입으로 주었기 때문에

예외 처리가 발생하게 되어

try의 내부 코드는 동작하지 않고 catch의 내부 코드인 예외처리와

finally 내부의 코드가 동작하게 됩니다!

 

위의 코드 구현

 

 

느낀점

: 이번에 국비지원 프로그램만으로는 한계를 느끼게 되어 스터디를 만들게 되었고 다행히도 많은 분들께서

  지원을 해주셔서 함께 스터디를 진행하게 되었습니다!

  처음으로 책을 활용해서 공부를 해보았는데 음,,,아직은 책이 많이 어렵게 느껴지는 건 사실입니다

  부트캠프의 특성상 시간이 넉넉하지 않기 때문에 기본적인 내용들을 탄탄하게 다지고 넘어가지 못하기도 하고

  저는 프로그래밍 언어를 처음 배우다 보니 아직 익숙하지 못해서 어렵게 느껴지는 것 같기도 합니다

  그래도 매주 이렇게 스터디룸에서 다 같이 모여 일주일동안 Kotlin In Action에서 공부할 부분을 나누고 

  서로 발표도 하고 피드백도 주다보면 더 탄탄하게 성장할 수 있는 기회가 될 수 있을 거 같습니다!