예외처리는

예상가능한 예외 지역에 대비해 처리해두는 것이다.

보통 지금까지 우리는
if문을 이용해 예외처리를 해왔다.

나누기연산에서 분모에 0이 들어가면 에러가 나니까
if문으로 0이들어오면 다시 입력해달라고 할 때
if문을 보통 사용했다.
하지만 JAVA든 모든 프로그래밍 언어에서 if문은 유용하게 사용되는 구문 중 하나이다.

그렇기에 예외처리가 아니더라도 많이 사용될 수 있고
그렇게 되면 예외처리부분을 찾기가 어려운 상황이 생길수 있다.

또, 예외처리를 따로 한다면
코드를 읽는데 더 쉽게 해줄수 있을 것이다.

JAVA에서는 이러한 예외처리를 위해
try-catch 구문이 있다.

try
   {
내용
   }
catch
{}

이런 형식으로 작성할 수 있다.

우리가 예외상황이 일어날 수 있을 것 같은 구문을 try로 감싼다. 그리고 바로 catch구문을 적어
예외상황이 일어나면 이렇게 처리하라는 내용을 적는다.
여기서 catch사이에 다른 구문이 들어갈 수 없다.

try로 감싼 부분이 끝나자마자 catch가 나와야한다.

이렇게 되면 catch영역이 실행되고나면 무조건 예외적인 상황이 적절하게 처리됬다고 판단하고 다음 실행으로 넘어가게 된다.

* 이때 중요한건 오류가 해결됬다는 건 아니다. 오류에대한 보고를 출력하고 그 부분을 넘어가겠다는 말이지 오류에 대한 해결책은 될 수 없다는 것이다.

예외처리는 예외 클래스를 이용해 가능하다.

알고있어야할 메소드
e.getMessage()

여기서 e는 예외처리의 클래스 변수다.
이 메소드는 오류에 대한 내용을 출력한다.

* finally

try catch 구문 바로 뒤에 finally를 쓰고 {}로 내용을 채우면

finally
{ }

이렇게 바로 나오면 try구문에 들어가자마자 무조건 그 finally코드는 실행되는 코드이다.

try영역으로 일단 들어가면 무조건 실행되는 영역
이 바로 finally 구문 안의 영역이다.
중간에 return이 되더라도 finally영역은 실행되고 나서 메소드를 빠져나가게 된다.


이러한 예외 상황을 프로그래머가 직접 정의할 수도 있다.
0으로 나누기를 한다던가 등등
자바가 직접 설정한 예외상황뿐 아니라 프로그래머가 직접 정의할 수도 있다.

예를들면,
나이를 입력하는데 0보다 작은 값을 입력하면
문법적으로 틀리진 않지만 논리적인 오류가 발생한다.

그렇기 때문에 이런예외상황은 자바머신은 인지하지 못하지만 사람들은
알 수 있고, 이걸 따로 처리해주고 싶다면
예외 클래스를 만들어야한다.


(예외 클래스 선언)



예외 클래스 선언이다. extends로 Exception 클래스를 상속받고 있다.
우리가 정의할 예외 클래스들은 모두 Exception클래스를 상속받아야한다.

또 위 코드를 보면 생성자에 문자열을 입력하고 있다.
이 구문은 예외상황이 발생하였을때 호출되어 출력되는 문자열이다.



(throw)



위 코드를 보면 나이를 입력하는 메소드에서 예외처리를 한 상황이 일어날 법하다.

하지만 이 코드에 try-catch구문이 없다.
이 예외상황을 누군가는 처리해야한다. 하지만 try-catch가 없고 대신
메소드 위에 throws 라고 적혀있다.

이 말은 자기는 안할꺼고 이 메소드를 호출한 부분으로 예외처리를 던지겠다는 말이다.
즉, 해야할 일을 넘기는 거다.



(try-catch)



나이를 입력받는 메소드에서 던져진 예외 처리가 바로 이 메소드가 호출된 지점으로 던져진다.
다행히도(?) 던져진 지점이 try구문으로 덮여있다.

그렇게 되면 try구문 안에서 예외처리가 일어났으므로 catch로 잘 넘어가
예외처리가 된다.

만약 try-catch구문이 전혀없고 심지어
main 함수 또한 throws를 한다면?

-> 그렇게 되면 자바머신이 예외처리를 한다.

* printStackTrace
-> 이 메소드는 마치 자바머신이 예외처리를 하는 상황과 비슷해진다.
-> 예외처리가 된 이유를 추적해서 어디서부터 잘못됬는지 화면에 보여준다.

정리하자면
예외처리상황은
try-catch문을 이용해서 예외를 처리하든
throws를 이용해서 던지든
해야한다.



* 전화번호 관리 프로그램 06단계

오늘 공부한 예외처리를 전화번호관리 프로그램에 적용시켜보았다.

1번부터 4번까지의 선택지중 다른걸 선택하였을 때
사용자에게 예외상황임을 알리는 것이다.




(예외 클래스)




먼저 예외 클래스를 정의 하였다. 메뉴선택예외이다. 이때 출력되는 구문은
"잘못된 선택이 이뤄졌습니다." 이다. 또 예외 처리시 선택된 choice를 매개변수로 받아와
어떤 선택은 없다고 다시 말해주는 메소드도 추가해보았다.



(초기 선택)




(예외상황 throws)


(try-catch 구문)



(정상적인 실행)



이로써 오늘 배운
예외처리를 이용하여
전화번호관리 프로그램도 6단계로 업그레이드 하였다.


(*참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)


+ Recent posts