본문 바로가기
IT /1) 자바

자바독학)try-catch(예외처리)

by 세세tv 2019. 10. 26.

 

프로젝트명 : G7_TryCatch

패키지명 : try_catch

클래스명 : B1_TryCatch

 

try catch는 예외처리 방법입니다.

 

 

int에 문장을 넣어봤습니다.

지금까지 저희가 봤던 오류 문구입니다.

 

자바에서 프로그램이 실행되는 도중 오류가 발생하면

프로그램은 강제 종료됩니다.

 

의도한 오류 혹은 사용자의 실수로 발생한 오류 시

프로그램은 진행되어야 합니다.

 

예외처리를 통해 프로그램의 비정상적인 종료를 막아주는 역할입니다.

 

 

int n = 0;

int result = 0;

int arr[] = new int[2];

 

이렇게 만들어보겠습니다

 

result = 10/n; 해보니

오류가 발생합니다.

 

모든 숫자는 0으로 나눌 수 없으니

오류가 발생합니다.

 

프로그램은 강제 종료되겠죠?

 

 

컴퓨터 계산기를 보니

"0으로 나눌 수 없습니다."라는 문구가 나옵니다.

 

컴퓨터 기본 계산기는 강제 종료가 되지 않습니다.

0으로 나눴다고 강제 종료되면

 

사용자는 영문도 모르고 꺼진 줄 알겠죠??

 

 

try{  }catch(Exception e){  }

구문 만들어보겠습니다.

 

10/0을 실행하니

ArithmeticException이 발생합니다.

 

 

arr의 5번 방에 10을 넣어보겠습니다.

 

arr은 1번 방까지 있으니 오류가 발생하겠죠?

오류 이름은 ArrayIndexOutOfBoundsException입니다

한번 넣어볼까요?

 

 

try의 중괄호{} 내부에 코드를 작성합니다.

오류가 발생하면 catch로 이동합니다.

 

위의 경우

result = 10 / n;

arr[5] = 10;

 

둘 다 오류가 발생하지만!

"0으로 나눌 수 없습니다."만 출력되는 것을 보니

 

오류가 1개라도 발생하면 이후 내용은

모두 실행하지 않는다는 것을 알 수 있습니다.

 

finally는 출력이 되었네요?

finally는 오류가 있어도 없어도

무조건 실행되는 영역입니다.

 

 

 

 

 

try-catch를 사용하여 일부러 오류를 발생시켰습니다.

 

for(int i = 0; i <= arr.length; i++)

arr.lenght = 2입니다.

arr의 index는 0과 1 두 개입니다.

 

arr[2]는 당연히 오류가 발생하겠죠??

위와 같은 경우도 catch를 통해 거를 수 있지만!!

 

조건식을 잘못 작성했으니 수정해야지

단순히 catch에서 처리하는 것은 옳지 않습니다.

 

위의 예시로 보아

try의 내용을 실행하다 오류가 발생하면

오류 이전의 내용은 출력되고

오류 이후의 내용은 출력되지 않는다는 것을 알겠네요!

 

위의 catch구문에서

 ArrayIndexOutOfBoundsException

ArithmeticException

오류 등 종류가 많지만,

단순 Exception은 모든 오류를 해결합니다.

(Exception e)에서 e는 Exception변수 같은 겁니다.

 

자바 프로그램에서 가져온 Exception은

파라미터라고 생각하시면 좋을 거 같네요

 

 

클래스명 : B2_TryWork

 

클래스 하나 생성해서 연습해봅시다.

 

키보드에서 정수를 입력받고 입력받은 수를 그대로 출력합니다.

간단하죠??

 

단, 정수 이외의 값을 받는다면

"정수만 입력할 수 있습니다"

라는 메시지를 출력해주시면 됩니다.

 

 

스캐너를 생성해주시고

int형으로 값을 받아주겠습니다.

 

'가'라고 입력해보았습니다.

 

InputMismatchException이 발생합니다.

 

 

try구문에서 정수를 입력받고

그대로 출력해주겠습니다.

 

catch구문에서 InputMismatchException으로 예외처리를 하고

메세지를 출력했습니다.

 

그냥 Exception으로 해도 좋지만

저는 교육이 목적이니 위와 같은 오류가 발생하면

 

입력 값과 자료형이 잘못돼서 그런 거다!

라고 알려드리기 위해 위와 같이 작성했습니다.

 

 

클래스명 : B3_TryWork

 

세 번째 클래스 생성해주겠습니다.

 

이번에도 정수를 입력받는 문제입니다.

예를 들어 aa를 입력하면 "aa은(는) 정수가 아닙니다"

 

단, 스캐너로 받는 값은 String타입으로 받아주겠습니다.

 

Scanner scan = new Scanner(System.in);

String str = scan.next();

 

이렇게 입력받아주시면 됩니다.

 

 

간단합니다!

 

try구문에서

String을 통해 입력받고

 

Integer.parseInt(str)을 통해

정수형으로 변환해 주시면 됩니다.

 

str을 int형으로 변환하지 못한다면!

오류가 발생할 것이고

 

변환한다면 int형이겠죠??

 

예외처리는 간단하게 Exception으로 해주겠습니다.

댓글