Not Using/JAVA

예외처리! 던지기!!뾰뾷!

longer 2011. 12. 21. 17:22


Exception 처리의 기본코드
-위험할 수 있는 코드를 try~catch{}을 활용해서 보험처리를 한다.

 try{
    문제가 발생할 수 있는 코드
    보호가 필요한 코드
  }catch(Exception e){
   잘 못 되었을 때 처리할 코드(대안코드)
  }

-'{}'은 별도의 메모리 공간을 차지하기 때문에 실행되는 코드는 별도의 공간에 실행

try ~ catch(Exception)블럭
-catch(Exception e){..}을 보면 마치 메소드처럼 파라미터로 처리되는 것과 유사
-실제로 JVM은 예외가 발생하면 예외를 ★객체★로 만들어서 처리
-Exception은 모든 예외 객체들의 부모 클래스이므로  다형성처럼 모든 하위의 예외객체들을 처리할 수 있는 구조(상속구조)
-finally~끝끝내... 예외가 발생하든 안하든 무조건 실행할 부분
try{}catch{}finally{}


throws Exception
-예외를 현재 코드에서 직접 처리하지 않고, 코드가 호출된 곳으로 전달해 버리는 방식
-다른 의미로 표현하자면 호출한 장소에 예외 객체를 전달하는 방식
-일종의 리턴 타입처럼 설계하는 데 유용하게 사용될 수 있다.
(리턴타입은 받아도되고 안받아도되나(상위에서) 예외는 반드시 받던가 JVM에게 넘기던가 선택을 해야함)


예제


public class ExceptionEx2 {

 public void doA(){
  System.out.println("doA");
  doB();
  doC();
 }
 public void doB()throws Exception{
  System.out.println("doB");
 }
 public void doC(){
  System.out.println("doC");
 }
}


위와같이 doB에 예외가 발생할 경우 예외처리를 해주는데 있어서 doB본인이 스스로 예외처리를 담당할지 doB를 불러서 사용하는 doA에게 예외처리를 떠맡길지 결정해야 한다. doA에게 넘기면 JVM까지 넘겨버릴수있다. 하지만 doB가 스스로 예외처리하여 try~catch로 잡으면 된다.  (doA가 doB를 호출했는데 이상이있을경우 알아야 하기 때문에 예외처리를 누구에게 맡길 것인가에 대해 결정해야함)


그렇다면 예외를 여러가지로 설정해야 할 경우
다중예외처리방법

ex)
Class.forName("java.lang.String").newInstance();메소드를 사용할 경우 예외처리가 다양하게 뜨는것을 볼 수 있음.
try에 catch종류도 다양하고 throws해서 넘겨주는 예외도 다양하다.


사용자정의 예외(리턴타입대신 설계)

-주로 Exception을 상속해서 개발자가 직접 Exception을 설계할 수 있다.
-클래스를 정의하는 것과 비슷하게 설계
-주로 비즈니스 로직★에 대한 잘못된 상황을 전파하는 목적으로 설계하는 것이 일반적이다.
(pm급이 개발을 하는데 있어서 절대 필요한 로직을 정할때나 하는거기 때문에 아직 초보단계에서는 정의만 하는정도로..)