Language/JAVA

[JAVA] 예외처리

nineil91 2021. 10. 17. 09:55

예외란 "실행 중 오동작이나 결과에 악영향을 미치는 예상치 못한 상황 발생"이다. 자바에서는 실행 중 발생하는 에러를 예외로 처리하기로 한다. 표준 API 내에서 모든 예외를 다룰 수 없기에 어플리케이션 예외를 처리해 주어야 한다. 이를 개발자가 직접 정의하여 사용한다 해서 사용자 정의 예외 라고도 한다. 

 

아래 사진은 자바에서의 예외 객체 분류이다.

 

출처 : https://www.javamadesoeasy.com/2015/05/exception-handling-exception-hierarchy.html

오류와 예외

오류(Error) : JVM에서 생성되거나 나타나는 예외. 어플리케이션을 종료해야함. 개발자가 미리 예측하여 방지하기 어려움. (ex. 스택 오버플로우 등 메모리 누수)

예외(Exception) : 개발자가 구현한 로직에서 발생한 실수 or 사용자 입력(상호작용)에 의해 발생하는것. (ex. "정수를 입력하시오."와 같은 요구사항을 주고 입력을 받았으나 사용자가 정수를 입력하지 않는 등의 상황)

 

자바에서의 오류

오류 중 StackOverFlow에러는 개발자에 의해 처리 될 수 있으나 대부분의 것이 처리하기 어려움.

StackOverFlow Error : Stack 메모리를 할당된 것 보다 많이 사용하여 발생. 정확히는 스택 포인터가 스택의 경계를 넘어설때 일어남. 메모리 영역의 스택 범위가 초과하여 발생. loop문이나 재귀함수 사용할때 예외처리를 해주거나 크기보다 적게 사용하도록 해야함.

 

 

자바에서의 예외

위의 기재된 예외 외에도 프로그램 로직상 문제를 예외처리로 나타내야 할 경우가 있음.

ArithmeticException(산술예외) : 정수를 0으로 나눌때 발생

ArrayStoreException(배열 저장 예외) : 배열 유형과 호환되지 않는 배열 요소에 값을 저장하려 할때 throw 됨.

ClassCastException : 개체에 대한 참조를 부적절한 형식으로 캐스팅하려고 할때 throw 됨.

IllegalAtgumentException : 잘못된 인수가 메서드에 전달

IllegalMonitorStateException : 객체의 모니터를 소유하지 않은 스레드에서 객체의 wait(), notify(), notifyAll()메서드가 호출될 때 발생.

IndexOutOfBoundsException : 배열 또는 문자열 인덱스가 범위를 벗어날때 발생.

NegativeArraySizeException : 음수의 배열 크기를 선언할때 발생

NullPointerException : null 개체 참조를 통해 개체를 액세스 하려면 throw. 불필요한 null parameter를 줄이면 예방 가능.

SecurityException : 설치된 SecurityManager 개체에 의해 구현된 보안 정책을 위반하는 작업을 수행하려는 시도에 throw.

 

자바 예외 구분(Checked Exception, Unchecked Exception)

두 구분의 차이 : 반드시 예외를 처리해야 하는가?

roll-back : 데이터베이스 업데이트에서 오류가 발생했을때, 이전상태로 되돌리는 것.

 

예외처리

발생한 예외에 대해 개발자가 처리하는 방식. try-catch-finally문을 사용한다. 보통 finally를 제외한 try-catch문을 많이 사용한다. finally는 사실 그냥 코드를 사용하여 표현해도 된다고 생각.

try{
	예외가 발생할 가능성이 있는 실행문
}
catch (예외 타입 선언){
	예외 처리문
}
finally{
	예외 발생 여부와 상관없이 무조건 실행되는 블록
}

 

예외회피

public void method() throws Exception{

}

 

 

'Language > JAVA' 카테고리의 다른 글

[JAVA] 상속  (0) 2021.02.26
[JAVA] 생성자  (0) 2021.02.26
[JAVA] 클래스와 객체  (0) 2021.02.04