본문 바로가기

Java

[Java] 예외처리

프로그램 오류

1. 컴파일 에러: 컴파일 도중 발생하는 에러

2. 런타임 에러: 실행 시 발생하는 에러

3. 논리적 에러: 실행은 되지만 의도와 다르게 동작하는것

에러 vs 예외

에러: 프로그램 코드에 의해 수습될 수 없는 심각한 오류

예외: 프로그램 코드에 의해 수습될 수 있는 오류

예외 클래스 계층구조

Exception 클래스들: 외적인 요인에 의해 발생하는 예외

RuntimeException 클래스들: 프로그래머의 실수로 발생하는 예외

Tip

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

2. getMessage(): 발생한 예외클래스의 인스턴스에 저장된 메시지를 받을 수 있다.

메서드에 예외 선언

메서드 내에서 예외 처리 안하고 발생하는 예외을 명시하는 방법도 있다.

try - with - resource

try {
	fls = new FileInputStream("score.dat");
    dis = new DataInputStrea(fls);
} catch(IOException ie) {
	ie.printStackTrace();
} finally {
	try {
		dls.close();
    } catch(IOException ie) {
    	ie.printStackTrace();
    }
}

와 같은 문제를 해결하기 위해 아래와 같이 작성할 수 있다.

try(FileInputStream fis = new FileInputStream("score.dat");
DataInputStream dis = new DataInputStream(fls)) {
	while(true) {
    	score = dls.readInt();
        System.out.println(score);
        sum += score;
    }
} catch(EOFException e) {
	System.out.println("점수의 총합은 "+sum+"입니다.");
} catch(IOException ie) {
	ie.printStackTrace();
}

try - with -resource 문의 괄호 안에서 생성된 객체는 try 블럭을 벗어나면 자동으로 close()가 호출된다. 이를 위해 괄호안에서 생성된 객체의 클래스가 AutoCloseable이라는 인테페이스를 구현해야한다.

CloseException은 Suppressed되고 다른 Exception에 저장된다.

'Java' 카테고리의 다른 글

[Java] java.lang 패키지 & 유용한 클래스들  (0) 2020.11.15
[Java] 객체지향 프로그래밍  (0) 2020.11.15
[Java] 배열  (0) 2020.11.11
[Java] 변수  (0) 2020.11.11
[Java] 자바란  (0) 2020.11.11