관리 메뉴

MOMONOTE

예외 본문

JAVA/JAVA (basic)

예외

momo0503 2021. 1. 13. 17:23

에러는  JVM 실행에 문제가 생긴 것이고, JVM 위에 실행되는 프로그램을 잘 만들어도 결국 실행 불능이 된다. 개발자는 이런 에러를 대처할 방법이 없다. 자바는 에러 이외에 예외(exception)라고 부르는 오류가 있다. 예외란 사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다.

예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 동일하지만, 예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

 

예외는 일반 예외(Exception)실행 예외(Runtime Exception)가 있다.

일반 예외는 체크예외라고도 하는데, 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문이다.

예외 처리 코드가 없다면 컴파일 오류가 발생한다. 

 

실행예외는 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. 컴파일 시 예외 처리를 확인하는 차이일 뿐, 두가지 예외 모두 예외 처리가 필요한다.

 

자바는 예외를 클래스로 관리한다. JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다. 그리고 나서 예외 처리 코드에서 예외 객체를 이용할 수 있도록 한다. 모든 예외 클래스는 java.lang.Exception 클래스를 상속받는다.

 

실행 예외는 java.lang.Exception의 java.lang.RuntimeException의 상속을 받는다. 

 

실행예외는 javac가 체크하지 않아, 개발자가 직접 예외처리 코드를 삽입해야한다.

 

NullPointerException 

가장 빈번한 실행 예외 , 객체 참조가 없는 상태. null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.) 사용했을 때

 

ArrayIndexOutOfBoundsException

배열의 인덱스 범위 초과하엿 ㅏ용할 경우

 

NumberFormatException

문자열이 숫자로 변환될 수 없는 문자가 포함될때 , 변환코드를 작성시. ex) String ="a100"; 을 숫자로바꿀떄 

 

ClassCastException

억지로 타입변환을 시도한 경우.

 

ArithmeticException

연산을 수행할 수 없을 경우

예외 처리

프로그램에서 예외가 발생할 경우 갑작스러운 종료막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고한다.

 

try{

//예외 발생 가능성 있는 코드

}catch(예외클래스 e){
  //예외처리
}finally{
  //항상 실행; 옵션임
}

 

try 블록내에 다양한 종류의 예외가 발생할 수 있따. 발생되는 예외별로 예외 처리 코드를 다르게 하려면 다중 catch 블록을 작성한다. catch블록이 여러 개라 할지라도 단 하나의 catch 블록만 실행된다. try블록 네에서 동시 다발적으로 예외가 발생하지 않고, 예외 하나가 ㅂ라생하면 즉시 실행을 멈추고 해당 catch 블록으로 이동하기 때문이다.

 

다중 catch 블록 작성시 유의할 점은 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야한다. try 블록에서 예외가 발생했을때, 예외 처리를 해줄 catch 블록은 위에서부터 차례대로 검색된다. 만약 상위 예외 클래스 catch 블록이 위에 있다면 , 하위 예외크래스의 catch 블록은 실행되지 않는다. 하위예외는 상위예외를 상속했기 대문에 상위 예외 타입도 되기 때문이다.

 

 

메소드 내부에서 예외가 발생할 수 있는 코드는 try -catch로 예외처리하지만 , 경우에 따라 메소드를 호출한 곳으로 예외를 떠넘길 수 있다. throws를 이용한다. 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다. 

public void m1() throws ~~Exception {...}

 

어떤 메서드가 api 문서에서 throws ~~Exception이 있다면 그 메서드를 호출할 때 예외처리를 꼭 해줘야 한다.

 

자바 표준 API 에 존재하지 않는 예외는 직접 만들 수 있다. (사용자 정의 예외 클래스)  

 

 

'JAVA > JAVA (basic)' 카테고리의 다른 글

자바 컬렉션 프레임워크  (0) 2021.01.15
자바 API 클래스  (0) 2021.01.13
중첩 클래스, 중첩 인터페이스  (0) 2021.01.13
인터페이스  (0) 2021.01.13
추상 클래스  (0) 2021.01.12
Comments