단단히

예외처리 본문

Java/개념 정리

예외처리

이게아닌데 2022. 5. 22. 22:49

[ 에러(Error, 오류) 종류 ]

1. 컴파일 에러(기계 신호로 바꾸는 와중 오류)
- 오타, 누락, 순서 오류
2. 실행 에러
- 컴파일 에러는 아니지만 실행하니까 발생하는 오류 >> 예외 ( Exception )
 참고) 예외를 정상 실행하여 정상 마무리할 수 있도록 고치는 것

          >> 예외 처리 (Exception Handling) -비정상 종료.. 등

 

프로그램은 코드 작성 과정에서 오류(=컴파일 오류)가 없더라도 실행 과정에서 오류가 발생할 수 있다.

예외처리의 목표정상 종료임을 기억해야 한다.

 

[ 예외(Exception) 처리 방법 ]

 

try {

  오류영역 //예외 발생 의심코드 or 실행 후 예외가 발생했던 코드
          //그러나 예외가 발생하지 않은 코드를 기재해도 무방하다.
          
} catch (익셉션 타입 익셉션변수) {
  
  매개 변수를 이 블록에서 사용한다.
  //syso(e. getMessage());   >> 관리형 코드 / 예외관련한 메시지를 출력만 할 경우
  //예외가 발생했을 경우 실행해야하는 코드;
  
} finally {

// 예외가 발생하든 안하든 정상실행하시오. >>무조건 실행하는 코드이다.
// 선택 사항
}

 

> 해당 예외처리 클래스 ; 실행했을 때 console 결과 화면에서 나차 나는 예외처리 메시지 참조해야 한다.

                                필요할 경우 import (패키지). 클래스 ; 형식으로 선언한다.

 

 

try문에는 catch가 반드시 있어야 한다.

try 하나당 catch는 여러 개, 반복 사용이 가능하다.

그러나 try와 catch는 반복으로 적어도 상관없다.

 참고) 보통 익셉션 변수(매개변수)는 e를 주로 사용한다. ( catch는 메서드가 아니다.)

   --> 매개 변수가 있다는 건 인수가 있다는 뜻.

 

필수적으로 예외처리를 해야 하는 클래스들이 있다.

예외처리(try문 코드)를 사용하지 않으면 컴. 파. 일. 오류를 발생시키는 클래스들이 있다.

try문 생략 가능 (unchecked exception) - RuntimeException, ArithmeticException, NullPointerException,...

try문 생략 불가능 (checked exception) - unchecked exception을 제외한 나머지

 -try-catch구문을 사용하지 않으면 컴파일 에러를 발생시킴. 그러므로 반드시 try-catch문을 사용해야 한다.

 

 

 

예외 처리를 할 경우, 개발자는 오류 메시지를 집중해서 봐야 한다.

 

[ 클래스의 계승관계 ] (> 히스토리 관계)

object, 다른 클래스는 Object클래스를 승계해서 만들었다.

클래스는 여러 부류 계열로 나눠져 있는데, 문자열을 다루는 계열, 수학을 다루는 계열, 예외처리를 다루는 계열.. 등

이중 예외처리의 최초 클래스는 'Exception'이다.

만약 Exception의 종류를 모른다면 가장 상위 클래스인 Exception을 넣어도 된다.

주의할 점은 Exception이 가장 상위 클래스로 모든 Exception의 상위이기 때문에 사용하기 위해서는 catch의 가장

아래쪽에 넣어 코드를 짜야한다.

 

[예외 던지기]

> 메서드 정의에서 메서드를 호출한 곳으로 예외를 전파하기 ; 커스텀 예외처리

발생된 예외를 try- catch문으로 처리하는 대신 호출한 곳으로 throws문으로 던질 수 있다.

여러 곳을 예외 처리하는 것이 아니라 한 곳에 모아서 예외처리가 가능하다는 점이 장점이다.

 

 

 


+++++ 22.09.20 추가 +++++

 

catch문 Exception 에러 출력

 

e.getMessage()

 

catch (ClassNotFoundException cnfe) {
			
	System.out.print("cnfe : " + cnfe.getMessage());

}catch (SQLException sqle) {
			
	System.out.print("sqle : " + sqle.getMessage());
			
}

 

 

예외가 발생했어도 결과는 출력이 된다.

이때 예외 발생 시 메시지는 Console창에 출력이 된다. 

발생한 예외 클래스의 인스턴스에 저장된 메시지를 출력한다.

에러 이 밴드와 함께 들어오는 메시지를 출력한다.

 

 

e.getStackTrace()

 

catch (ClassNotFoundException cnfe) {
			
	System.out.print("cnfe : " + cnfe.getStackTrace());
		
} catch (SQLException sqle) {
			
	System.out.print("sqle : " + sqle.getStackTrace());
			
}

 

 

우선 실행이 되지 않는다.  메시지는 아래와 같이 콘솔 창에서 나온다.

 

예외가 발생 시 호출 스택(call Stack)에 있던 메서드의 정보와 메시지를 화면에 출력한다.

에러 메시지의 발생 근원지를 찾아서 단계별 출력을 한다.

 

 

지금 사용한 getStackTrace() 메서드는 StackTraceElement의 배열을 리턴해준다.

 

 e.toString()

 

 catch (ClassNotFoundException cnfe) {
			
	System.out.print("cnfe : " + cnfe.toString());
			
} catch (SQLException sqle) {
			
	System.out.print("sqle : " + sqle.toString());
			
}

 

 

동일하게 결과는 나오지 않는다.

 

 

에러 이벤트의 toString()을 호출해서 간단한 에러 메시지를 출력해준다.

e.getMessage()보다 조금 더 자세한 에러 메시지가 나온다.

'Java > 개념 정리' 카테고리의 다른 글

클래스의 상속  (0) 2022.05.30
참조 자료형, 객체, 커스텀 클래스  (0) 2022.05.24
메서드(Method)  (0) 2022.05.22
연산자, 배열, 제어문  (0) 2022.05.17
실행창(Window+R)에서 바로 Eclipse 열기  (0) 2022.05.17
Comments