0101011001010111

kotlin4-3 예외처리의 필요성 본문

Kotlin/스파르타_코틀린 문법

kotlin4-3 예외처리의 필요성

[진주] 2023. 8. 2. 09:28
728x90
반응형

▼예외처리가 필요한 경우


- 고품질의 프로그램이란 사용성을 해치지 않아야해요.

-여러 측면의 사용성이 있지만 프로그램이 도중에 종료되는 건 심각한 문제예요.

-미리 예외를 생각하고 소스코드를 작성해야 안정성을 높인 프로그램이라고 할 수 있어요.
예외
발생 '전'
예외처리
-숫자를 입력받아서 더하는 프로그램인데 실수로 문자를 입력했다면 예외를 처리해야 해요.

- 사진을 다운로드 받는데 도중에 인터넷이 끊겼다면 예외를 처리해야해요.

- 수술을 받고 있는데 메인전력이 끊겼다면 보조 전력을 사용하도록 예외를 처리해야해요
실행 도중에
발생하는
예외에 대한
처리

예외 : 실행 도중 발생하는 에러를 예외라고 한다.


예외 처리문법예시를 알아보자.

 

예 : 먼저 숫자를 입력해야하는데 , 실수로 문자를 입력했을 때 > 예외처리

숫자를 입력해야하는데 문자를 입력했을 경우, 이렇게 NumberFormatException 이라는게 발생되고 종료가 됩니다.

 

 

어떻게 처리할까? ▼


while(true) {
        try {
            var num1 = readLine()!!.toInt()
            println("내가 입력한 숫자는 ${num1}입니다")
            break
        } catch(e:java.lang.NumberFormatException) {
            println("숫자를 입력하세요")
        }
    }


코드 설명 ▼

while(true)   //while(true)하면, 코드가 평생 돔. 무한 루프임 , 저는 이 코드를 보고 고구마 코드가 더 어울리겠다 생각했음.

                  ㄴ 왜냐면 얘가 원하는 값을 줄 때 까지 계속 - 돌기 때문에 // break를 통해 원하는 값을 얻었다면 중지 시킨다.

 

 

- 위 코드는 while(true)를 통해 계속 도는데, 언제까지 도냐? >> while(true)라는 친구가 원하는 값을 주면 break를 한다. 

만약, 원하는 값을 주지 않고 예외가 발생하면 , catch로 떨어지기 때문에, 다시 while로 돌아와서 또 입력하게 한다.

 

즉, 숫자를 입력할 때 까지 이 고구마는 너에게 계속 물을것이다.

숫자를 입력해야 종료된다...

NumberFormatException은 숫자 형식이 아닌 문자열을 숫자로 변환하려고 할 때 발생하는 특수한 종류의 예외입니다.


 

try-catch-finally은,

예외 처리와 관계없이 항상 실행하는 코드를 finallly에 작성해요 

 

이게 어떤거에 필요하냐면 ▼

USB와 연결하는 코드는 반드시 사용후에 연결을 끊어야해요 (자원낭비)

 ㄴ USB와 연결하다가, 도중에 끊길 경우에 예외처리를 했는데, 만약에 이게 잘 연결 되었더라도 USB를 할당하지 않으면 계속 메모리에 남게 되거든요. 자원낭비가 됩니다! 그래서 그런걸 방지하기위해 try - catch - finally를 사용한다.

 

GPS를 사용하는 코드는 반드시 사용후에 연결을 끊어야해요 (자원낭비)

 

예제▼

fun main() {
    while(true) {
        try {
            var num1 = readLine()!!.toInt()
            println("내가 입력한 숫자는 ${num1}입니다")
            break
        } catch(e:java.lang.NumberFormatException) {
            println("숫자를 입력하세요")
        } finally {
            println("키보드와의 연결은 정상적입니다")
        }
    }
}

자, try-catch-finally는  try-catch까지는 똑같아요.

하지만 try-catch와 상관없이 항상 실행되는 구문을 finally에 넣습니다.

잘못입력해도 finally가 나오고

 

올바르게 입력해도 finally가 나온다

728x90
반응형