티스토리 뷰

Java

예외처리1 - 오류와 예외

lkh's 2018. 10. 4. 22:53

1. 오류 vs 예외 비교

 오류 : 하드웨어의 오동작 또는 고장으로 인해 프로그램의 실행 오류가 발생하는 것

 예외 : 개발자의 설계 문제, 사용자의 잘못된 조작으로 인해 발생한 프로그램 오류. 일반예외와 실행예외로 구분

  * 일반예외는 자바소스를 컴파일하는 과정에서 예외처리가 필요한지 검사하기 때문에 컴파일러 체크 예외라고도 불린다.

  * 실행예외는 컴파일하는 과정에서 확인하지 않기 때문에 개발자의 경험에 의해 예외처리를 삽입해야 한다.

 

 실행예외 종류

설명 

  NullPointerException

  객체 참조가 없는 상태 또는 null 값인 참조변수에 대해 접근했을 때 발생하는 예외

  ArrayIndexOutOfBoundsException

  배열에서 인덱스 범위를 초과했을 때 발생하는 예외

  NumberFormatException

  데이터를 정수로 변환하는 과정에서 발생하는 예외

  ClassCastException

  형변환하는 과정에서 발생하는 예외


2. 예외처리 try ~ catch ~ finally

 프로그램에서 예외가 발생했을 때, 비정상적으로 종료되는 것을 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다.

 


3. 예외 떠넘기기 throws 

 메소드에서 예외가 발생했을 때, try ~ catch ~ finally 구문에서 처리하는 것이 바람직하고! 기본적인 방법이지만, 때에 따라 메소드를 호출하는 영역에서 예외를

 처리하도록 떠넘기는 것이 가능하다. 아래 예제를 확인해보자!

 throws를 코드를 사용하면, 해당 메소드를 호출한 영역에서 예외를 처리하도록 되어있다.

 형변환을 하는 parseInteger 메소드가 throws를 했기 때문에 해당 메소드를 호출한 callFunction 메소드가 예외를 처리한다.

 하지만 코드에서 callFunction 메소드도 throws를 했기 때문에 해당 메소드를 호출한 main 메소드가 예외를 처리해야 한다.

public class ExceptionExample {

	public static void main(String[] args) {
		try {
			callFunction("ERROR");
		} catch (NumberFormatException e) {
			System.out.println("최종적으로 오류를 처리하는 영역!");
		} finally {
			
		}

	}
	
	public static void callFunction (String str) throws NumberFormatException{
		try {
			System.out.println(parseInteger(str));
		} catch (NumberFormatException e) {
			System.out.println("callFunction()이 throws 하지 않으면 예외는 이 영역에서 처리!");
		} finally {
			
		}
	}
	
	public static int parseInteger(String str) throws NumberFormatException {
		return Integer.parseInt(str);
	}

}


'Java' 카테고리의 다른 글

멀티스레드  (0) 2018.10.27
예외처리2 - 사용자 정의 예외 클래스 생성  (0) 2018.10.04
Java equals() & hashCode()  (3) 2018.10.04
Package & Import  (0) 2018.09.17
자바 가상 기계 (JVM) 정의 및 구조  (0) 2018.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함