예외처리! 던지기!!뾰뾷!
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급이 개발을 하는데 있어서 절대 필요한 로직을 정할때나 하는거기 때문에 아직 초보단계에서는 정의만 하는정도로..)