Java/정리

예외처리

낭구리 2021. 9. 1. 18:32

프로그램에서의 오류

● 컴파일 오류(compile error)

프로그램 코드 작성 중 발생하는 문법적 오류

최근에는 개발 환경(eclipse)에서 대부분의 컴파일 오류는 detection 됨

● 실행 오류(runtime error)

실행 중인 프로그램이 의도 하지 않은 동작(bug)을 하거나 프로그램이 중지 되는 오류

실행 오류는 비정상 종료가 되는 경우 시스템의 심각한 장애를

예외 처리의 중요성

● 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함

● 실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘들다

● 오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요

오류와 예외 클래스

● 시스템 오류(error) : 가상 머신에서 발생, 프로그래머가 처리 할 수 없는 오류임

동적 메모리가 없는 경우, 스택 메모리 오버플로우등

● 예외(Exception) :프로그램에서 제어 할 수 있는 오류

읽어들이려는 파일이 존재하지 않거나, 네트웍이나 DB연결이 안되는 경우등

자바는 안전성이 중요한 언어로 대부분 프로그램에서 발생하는 오류에 대해 문법적으로 예외 처리를 해야함

예외 클래스들

● 모든 예외 클래스의 최상위 클래스는 Exception 클래스

● 자바에서는 다양한 예외들에 대해 그 처리를 위한 클래스가 제공되고 있음

Arithmetic Exception : 정수를 0 으로 나눈 경우 발생

NullPointerException : 초기화 되지 않은 Object를 사용하는 경우

Dog d = null;
System.out.println(dog);

ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우

FileNotFoundException : 참조하는 파일이 지정된 위치에 존재하지 않는 경우

try-catch 문

● try 블록에는 예외가 발생할 가능성이 있는 코드를 작성하고 try 블록 안에서 예외가 발생하는 경우 catch 블록이 수행됨

프로그래머가 예외를 처리해줘야 하는 예 (배열의 오류 처리)

public class ExceptionEx1 {

	public static void main(String[] args) {

		int[] arr = { 1, 2, 3, 4, 5 };

		try {
			for (int i = 0; i < 10; i++) {
				System.out.println(arr[i]);
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println(e);
		}
		
		System.out.println("비정상 종료되지 않았습니다.");

	}

}

try-catch-finally 문

public class ExceptionEx2 {
	public static void main(String[] args) {

		FileInputStream fis;
		
		try {
			fis = new FileInputStream("a.txt");
		} catch (FileNotFoundException e) {
			System.out.println(e);
			// return; 심지어 리턴문이 있어도 finally가 실행 됨.
		} catch (Exception e) {
			System.out.println(e.toString());
		} finally {
			// try 문이 실행되면 반드시 실행 됨.
			System.out.println("여기도 실행이 되나요?");
		}

	}
}

예외 처리 미루기 (throws)

class MyException {

	FileInputStream fis;

	public MyException(String fileName) throws IOException {
		readFile(fileName);
	}

	// throws 란 던지기 (사용하는 녀셕이 직접 에러를 처리 해라)
	private String readFile(String fileName) throws IOException {
		fis = new FileInputStream(fileName);
		Properties prop = new Properties();
		prop.load(fis);
		String dbType = prop.getProperty("DBTYPE");
		return dbType;
	}
}





public class ExceptionEx3 {

	public static void main(String[] args) {

		try {
			MyException exception = new MyException("b.txt");
		} catch (IOException e) {
			System.out.println(e.toString());
		}

	}
}

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

Thread  (0) 2021.09.07
제네릭  (0) 2021.09.07
내부클래스  (0) 2021.09.01
Object클래스  (0) 2021.09.01
인터페이스 활용예제  (0) 2021.08.31