차근차근/JAVA JSP

자바 예외처리 throws , throw

예쁜꽃이피었으면 2014. 7. 26. 01:42

http://natural1.tistory.com/

 

 

http://blog.naver.com/PostView.nhn?blogId=reach_reach&logNo=90118993495&categoryNo=20&viewDate=&currentPage=1&listtype=0

예외 처리는 명시적으로 던져진 예외 클래스의 인스턴스 앞에 throw 문을 사용해서 던져진다.

던져진 예외는 catch 블록에서 처리되거나 예외를 던졌던 매서드의 호출 매서드에 전달되어진다.

던져진 예외를 받는 매서드는 예외를 처리하거나 다른 매서드로 다시 예외를 던질 수 있다.

 

대부분, 시스템은 필요한 예외를 만들고 던진다. 프로그래머가 원한다면, 던져진 객체 앞에 throw 문을 사용해서 예외를 수동으로 던질 수 있다.

수동으로 예외를 던지기위한 일반적인 문법은 다음과 같다.

throw 던져질객체명;

던져진 객체는 반드시 Throwable 서브객체이어야한다. 이 문법은 잡힌 예외를 다시 던질 때 사용되어 질 수 있다.

 

throws 절은 매서드가 전질 수 있는 예외 타입을 선언하는데 사용된다. 자바는 매서드가 매서드 범위 내에서 던져질 수 있는 모든 checked 예외를 잡거나 선언하는것을 요구한다. 만약 매서드 안에서 적절한 처리기가 제공되지 않는다면, 던져질 수 있는 checked 예외 타입이 앞에 throws 키워드가 반드시 매서드 선언부에 포함되어 있어야한다.

[접근수정자] 리턴형 매서드이름(인자) throws 예외형1, 예외형2, ...

이 선언 요구는 오직 checked 예외에만 적용된다.

 

 

예제 - 예외를 다른 매서드에 전달하기

 

ArrayFunctions 클래스는 특정한 값에 의해 1차원 배열의 요소를 나누는 scaleArray()라는 정적 매서드를 정의한다.

0으로 나누어지는 실수는 시스템으로 하여금 예외를 던지게 하지않는다. 그러나 대신 쓰레기값을 리턴할 수도 있다.

이러한 경우를 피하기위해서, 만약 d라는 매서드 인자가 0.0이라는 값을 갖는다면 ArithmeticException을 매서드가 던질 것이다. ArithmeticException은 RuntimeException이기 때문에, 매서드 선언부에 throws 절을 사용해서 선언할 필요는 없다.

 

ThrowDemo 클래스는 1차원 영역의 double 형 값을 만들고 scaleArray() 매서드를 호출한다.

scaleArrary() 매서드가 ArithmeticException을 던지기 때문에, 매서드 호출은 try 블록 뒤의 코드 블록 안에 있게된다.

scaleArray() aotjemdp 0.0값을 전달하고 있기 때문에, 예외는 catch 블록에 의해서 던져지게 될 것이다.

 



 

 

* 실행결과

 

이런 0으로 나눴네요.

 

 

 

예제 - 예외를 매서드에서 처리하기

 

매서드를 처리하는 방법은 try catch 블록을 사용하거나 throws 절을 매서드 선언시에 해주는 방법이 있다. 위의 예제를 수정해보자.

 



 

 

* 실행결과

 

array[0] = Infinity
array[1] = Infinity
array[2] = Infinity

 

이를 수행해보면 예외가 발생했지만 프로그램이 동작하는 것을 볼수있다. 하지만 프로그램 코드상 결과값이 제대로 나오지 않는다. 

 

그럼 try catch블록과 throws 절의 차이점 무엇일까?

둘다 예외가 발생하면 프로그램을 계속해서 수행할 수 있도록 처리하는 것은 동일하나

throws절을 사용해서 처리하면 소스가 간단해지고 보기도 편해진다는 장점이 있으나 자세한 적용은 어렵다. 즉, 예외를 버리기만 하고 끝낸다.

try catch 블록을 이용하면 소스가 조금은 복잡해 보일지는 몰라도 그때 그때 예외에 맞게 잡아서 나름대로 처리를 일일이 해줄수있는 장점이 있다.

그렇기때문에 두가지 예외 처리 방법 중에 원하는 방법을 소스에 따라 알맞게 사용하길 바란다.

 

자바에서 예외처리는 강력한 기능을 제공하지만 때에 따라서는 많은 노력과 시간이 필요할 수도있다.

따라서 예외가 발생할 가능성을 최대한 줄이는것이 좋다

 


 


반응형

'차근차근 > JAVA JSP' 카테고리의 다른 글

interface  (0) 2014.07.26
Java에서 extends와 implements 의 정의  (0) 2014.07.26
UTF-8 개발에 관한 정리입니다.  (0) 2014.07.26
request.setcharacterencoding  (0) 2014.07.26
getInstance()  (0) 2014.07.26