돌아오신 것을 환영합니다
이번 영상에서는
try와 catch가 어떻게 작동하는지에 대해 보여드리고 여러분 앱 내에서 생길 수 있는 에러를 관리하는 방법을 알려드리겠습니다
그리고 이번 예시에서는 사용자로부터 데이터를 얻는 매우 간단한 앱을 만들 것입니다
그래서 여기에 println을 사용해서 사용자들에게 "숫자를 입력해주세요"라고 알리겠습니다
이제 readln을 사용해서 사용자가 입력한 정보를 읽게 하겠습니다
그리고 val 안에 보관하고 number를 호출하겠습니다
이 숫자를 읽게하고
그런 다음 사용자가 입력한 내용을 우리의 숫자로 변환할 것입니다
이제 우리가 아는 것은 readln은 string을 반환한다는 것입니다
그러나 저는 이를 가지고 정수(INT)를 만들 것입니다
그래서 이것을 INT로 변환합니다
이제 사용자가 입력한 내용을 print 합니다
"User entered $number"를 넣고 앱을 실행해보겠습니다
이건 정말 쉽습니다, 하지만 다음 기회에는 변경할 내용으로 어떻게 덮어쓰게 되는지를
살펴보겠습니다
한번 실행해보겠습니다
제가 5를 입력하면 사용자가 5를 입력하고 프로그램이 종료됩니다
이제 다시 실행해서 알파벳 o나 p를 입력합니다
p를 입력해보겠습니다
이제 예외(exception)가 발생하는 것을 볼 수 있습니다
프로그램이 충돌하고 발생하는 문제나 예외는 숫자 형식 예외입니다
따라서 기본적으로 앱에 문제나 오류가 발생할 때마다
다양한 유형의 예외가 발생합니다
Exception을 입력해보면
이 클래스가 기본임을 볼 수 있습니다
이용가능한 Kotlin 예외 또한 존재합니다
그러나 ArrayStoreException, ClassNotFoundException 등
많은 다양한 예외 기능들이 있습니다
그리고 프로그램에서 수행하는 작업에 따라 다른 예외가 발생합니다
따라서 파일을 모으거나 액세스하고 싶은데, 존재하지 않는다면 NoSuchFileException이
나오게 되겠습니다
아니면 존재하지 않는 변수에 액세스하려는 경우에는 KotlinNullPointerexception이
나옵니다
그래서 아주 다양한 예외들이 있다는 것을 말하고 싶었습니다
그러면 에러를 어떻게 처리해야 할까?
try라는 것을 이용하면 됩니다
그래서 문제가 될만한 코드를
실행하는 것보다
이렇게 해보시면
안전한 환경인 try 안에서 문제가 될만한 코드를 실행하고 발생하는 모든 예외를
catch 해낼 수 있습니다
그래서 이 괄호 안에 예외를 추가해야 합니다
e : exception을 입력합니다
그런 후 중괄호를 추가해 줍니다
이것이 일반적인 구조입니다
실행하고자 하는 중괄호 안에 try 키워드 중괄호가 있는 것입니다
error prone code you want to execute라고 입력해주고
오류가 발생하면 어떤 일이 일어날 지를 catch할 수 있습니다
그리고 이 경우, 에러를 print 해보겠습니다
println(e.message)를
입력합니다
e는 예외 객체입니다
그리고 예외 클래스는 message라고 하는 것이 있습니다
따라서 nullable String 유형인 message라고 하는 속성이 있습니다
그래서 message가 있을 수도 없을 수도 있습니다
그래서 이 물음표는 null일 수도 있다는 것을 의미합니다
그리고 또한 finally라는 block이 있습니다
finally는 또 다른 키워드인데
println에
(This will be execute regardless. Error or no error)을
입력합니다
자 이제 이것을 다시 한번 실행해서 무슨 일이 벌어지는 지 살펴봅시다
처음엔 진짜 숫자를 입력합니다
사용자가 5를 입력했습니다
여기 보시면
방금 적은 문장이 보입니다
This will be execute regardless. Error or no error 말입니다
s가 빠졌습니다
그래서 이것을 다시 실행하고 숫자 대신에 제 이름을 입력하면
For input string: "Dennis"는 This will be execute regarless가 나옵니다
우리가 한 것이 무엇이냐하면
이 For input string: "Dennis"는
여기 println(e.message)에서 왔습니다
이것이 바로 e.message입니다
그리고 여기 println 문장은
이 finally block 은 오류가 발생했음에도 실행되었습니다
그래서 여기에 오류같은 것을 추가한 다음 사람들이 이것이 실제로 오류 메시지라는 것을
알 수 있도록 하는 것이 합리적이기에 다시 실행을 해보겠습니다
보시면
여기 이 따옴표를 완성만 하겠습니다
다시 실행해봅시다
이제 Dennis라고
입력해보겠습니다
input string에 대한 에러가 발생했다고 나옵니다
그래서 입력한 input string이 뜨고 에러를 생성했습니다
그리고 이것이 예외가 우리에게 주는 값입니다
이것이 catch한 값인 것입니다
그래서 간단하게 말하자면 오류를 잡아내고 프로그램이 충돌하는 것을 막았습니다
try catch block 없이는 앱을 충돌시켰었습니다
그리고 괜찮다고 말하는 이 finally block이 있고 무슨 일이 있던 실행할 것입니다
그리고 이곳에 number = 0을 넣어줍니다
그러면 매번
여기에 사용할 수 있게 숫자를 밖에다가 설정하겠습니다
자 그래서 number: Int유형을 입력합니다
좋습니다
자 이제 val을 삭제해줍니다
숫자는 유형 Int가 될것이다라고 할 것입니다
숫자를 설정하고
그런 다음 finally block 안에 number를 오버라이드 해줍니다
오버라이드를 하고 싶다면 val 대신 var을 써줍니다
이렇게 하면 끝입니다
이제 우리 코드가 하게 되는 것은 사용자의 번호를 얻는 것이고
이를 정수로 변환하여 print 해줍니다
그리고 나서 에러가 발생한다면 catch하고 해당 에러를 표시합니다
그렇게 하고 에러가 있었던 없었던 간에
number에 0을 입력합니다
됐습니다
자 그래서 try와 catch block이 수행하는 잡업에 대한 일반적인 개념을 제공합니다
종종 try와 catch를 사용하게 될 것입니다
이는 앱을 만들 때 무슨 일이 일어날지 통제할 수 없을 때마다 유용합니다
예를 들어, 인터넷 연결을 시도하는 코드가 있는 경우에 인터넷 연결 상태와
연결하려는 웹사이트의 작동 여부, 그리고 사용자의 input을 얻을지에 대한 여부를
제어할 수 없습니다
사용자는 어떤 값이던 넣을 수 있기에 더 그렇습니다
편집 필드에서 열리는 키보드를 수정해서 사용자가 입력할 수 있는 정보를
제한할 수는 있습니다
하지만 그거 외에는 제어할 수 있는 방법이 없기에
try 와 catch block이 정말 강력하고 종종 사용하게 될 것입니다