예외처리

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
22/36

예외 처리

예외 처리: 프로그램 실행 도중에 발생할 수 있는 에러를 적절하게 처리하는 방법

  • 오류 : 프로그램 실행하기 전에 알 수 있는 컴파일 에러
    • 컴파일: 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업
  • 예외 : 프로그램 실행 도중 발생하는 런타임 에러
    • 런타임: 프로그램이 실행되고 있는 동안의 동작
  • 실행 도중에 예외가 발생하면 프로그램이 강제로 종료됨(비정상적 종료)
    • 프로그램이 도중에 종료되는 건 매우 심각한 문제!
    • 언제나 코드를 작성할 때 예외처리를 생각해야 됨
  • 코틀린은 try-catch와 throw로 예외를 처리

try-catch

try = 예외가 발생할 확률이 높은 코드를 감싸는 구역

catch = 예외가 실제로 발생했을 때 처리하는 구역

finally = 예외에 상관 없이 실행해야하는 코드

  • 에러가 발생했을 때 로그를 남기거나, 처리하고 싶으면 try-catch 사용

기본 구조

fun method1() {
		try {
			예외가 발생할 가능성이 존재하는 코드
		} catch(예외종류) {
			예외가 발생했을때 처리할 코드
		} finally{
        	예외랑 상관없이 항상 실행되어야 하는 코드
            일반적으론 생략함
        }
}

try-catch를 식으로 사용할 수 있다.

import java.lang.NumberFormatException

fun main(){
    val test = try {
        readLine()!!.toInt()
    }catch (e:NumberFormatException){
        null
    }

    println(test)
}

try-catch 예제

  • 정수를 입력해야하는 변수네 문자를 입력했을 경우 예외 처리법
	while(true) { //계속 입력 받도록 while을 사용
       try { // 만약 정수형이 아닌 입력이 들어갈 경우(에러가 발생할 경우) catch로 바로 이동
           var num1 = readLine()!!.toInt() //정수형만 입력 가능
           println("내가 입력한 숫자는 ${num1}입니다")
           break //에러가 없으면 탈출 가능
       } catch(e:java.lang.NumberFormatException) { //정수형이 아닌 입력이 들어왔을 때 실행되는 영역
            println("숫자를 입력하세요")
        }
    }

try-catch-finally 예제

	while(true) { //계속 입력 받도록 while을 사용
        try { // 만약 정수형이 아닌 입력이 들어갈 경우(에러가 발생할 경우) catch로 바로 이동
            var num1 = readLine()!!.toInt() //정수형만 입력 가능
            println("내가 입력한 숫자는 ${num1}입니다")
            break //에러가 없으면 탈출 가능
        } catch(e:java.lang.NumberFormatException) { //정수형이 아닌 입력이 들어왔을 때 실행되는 영역
            println("숫자를 입력하세요")
        } finally {
            println("키보드와의 연결은 정상적입니다")
        }
    }

throw

종료되지 않게, 예외가 발생했다고 알려주는(던지는) 역할

  • 어떤 처리를 하는 게 아니라 알려주기만 하는 역할

  • 에러가 발생했을 때 로그를 남기거나, 처리하고 싶으면 try-catch 사용

  • 기본 구조

fun method1(num1:Int) {
		if(num1 > 10) {
			throw 예외종류
		}
}

예외 처리는 어디에 사용할까?

  • 예시
    • 숫자를 입력받는 프로그램은 문자로 입력받는 걸 예외 처리해야 됨
    • 사진 다운로드 도중 인터넷이 끊긴다면 예외 처리해야 됨
    • 수술을 받고있는데 메인 전력이 끊겼다면 보조 전력을 사용하도록 예외 처리해야 됨
    • USB와 연결하는 코드는 반드시 사용후에 연결을 끊어야 됨 (자원낭비)
    • GPS를 사용하는 코드는 반드시 사용후에 연결을 끊어야 됨 (자원낭비)

0개의 댓글