Day26 :) 예외처리

Nux·2021년 10월 13일
0

자바웹개발

목록 보기
26/105
post-thumbnail

예외처리

  • 프로그램 실행 시 발생 할 수 있는 오류
    • 에러(error): 시스템, 운영체제, JVM문제. 코드에 의해 수습 불가.
    • 예외(exception): 개발자나 사용자에 의해 발생하는 문제. 코드로 수습 가능
  • 예외처리: 프로그램 실행 시 발생하는 예외에 대비하는 코드를 작성하는 것
  • CheckedException: 사용자의 잘못된 사용으로 발생하는 예외
  • RuntimeException: 프로그래머의 잘못된 코딩으로 발생하는 예외
 확인 시점처리 여부오류발생원인
CheckedException컴파일시반드시 예외처리사용자의 잘못된 사용
RuntimeException런타임시명시적으로 하지 않아도 Ok개발자의 코딩실수

예외처리하기

try-catch문 사용

try{
	A 예외발생이 예상되는 수행문;
	B 수행문;
} catch(예외클래스타입 변수명) {
	C 예외발생시 수행문;
} catch(Exception 변수명){
	D 수행문;
}
  • 예외 발생 시: A👉C
  • 예외가 발생하지 않을 시: A👉B👉D
  • 발생한 예외의 종류와 일치하는 단 한개의 catch블럭만 실행
  • try블럭 내에서 예외가 발생하지 않으면 try-catch문을 빠져나감
  • Exception클래스는 모든 예외클래스의 부모이므로, C를 빠져나가더라도 D에 의해 처리됨

멀티 catch블럭

try{
	...
} catch (Exception A | Exception B e) {
	e.getMessage();
}
  • 여러 catch블럭을 | 를 이용하여 합칠 수 있음
  • Exception이 상속관계일 경우 부모클래스만 작성
  • 두 Exception의 공통메서드만 선언 할 수 있음

printStackTrace(), getMessage()

  • 예외클래스는 printStackTrace(), getMessage() 메서드를 포함하고 있음
  • 이 메서드를 이용해서 예외내용 출력 가능
try{
	System.out.println(1);		// 정상출력
	System.out.println(0/0);	// 예외발생
	System.out.println(2);		// 출력되지 않고 catch로 넘어감
} catch ( Exception a) {
	a.printStackTrace();					
  	// 출력값: java.lang.ArithmeticException: / by zero
			at MyClass.Product.main(Product.java:10)
	System.out.println(a.getMessage());
    	// 출력값: / by zero
}

예외강제발생

  • throw키워드로 예외를 강제로 발생시킬 수 있음
try {
	Exception e = new Exception("강제발생");
	throw e;
	// 혹은 throw new Exception("강제발생");    
} catch (Exception e) {
	System.out.println("메세지: " + e.getMessage());
	// 출력값 -> 메세지: 강제발생
}
  • 예외 강제발생을 사용 할 때
    • 업무로직 위배 ex)아이디 중복, 비밀번호 틀림, 출금금액이 잔액보다 많을 때 등
    • 유효한 입력값이 아닐때 ex) 틀린 이메일 형식, 범위를 넘어가는 값 등

메서드 예외선언

  • 메서드에 예외 선언/처리 가능
  • 메서드 선언부에 throw를 사용해서 예외 작성
void method() throws Exception1, Exception2{
	// 메서드 내용
}
  • 키워드 주의 할 것👉throws: 예외메서드 / throw: 예외강제발생

사용자 정의 예외

  • 기존 정의된 예외 클래스 외 새로운 예외클래스 사용 가능
  • 보통 Exception이나 RuntimeException을 상속받아 클래스 생성
class MyException extends Exception{
	MyException(String msg){}
}
public class A	{
	public static void main(String[]args) throws MyException{
    	int x = 10;
        
        if (x<20) {
        	throw new MyException("사용자 정의 예외");
		}
	}
}

0개의 댓글