Exception과 Error의 차이
프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료가 되는 경우가 있다. 이때 이러한 결과를 일으키는 원인을 프로그램 에러 또는 오류라고 한다.
에러에는 다음과 같은 3가지 종류가 있다.
- 컴파일 에러 : 컴파일 시에 발생하는 에러
- 런타임 에러 : 실행시에 발생하는 에러
- 논리적 에러 : 실행은 되지만 의도와 다르게 동작하는 것.
자바에서는 실행 시 발생할 수 있는 프로그램 오류를 Error와 Exception 두가지로 구분하였다.
Error = 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
Exception = 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
자바가 제공하는 예외 계층 구조
위의 계층 구조를 2가지로 나누어 볼 수 있다.
Checked Exception vs Unchecked Exception
UnChecked Exception(RuntimeException클래스와 자식들)
: 프로그래머의 실수로 발생하는 예외
: 예외처리를 강제화하지 않는다.
: 런타임 시점에 예외를 확인한다.
Checked Exception(Exception클래스들(RuntimeExcpetion과 자식들 제외) )
: 사용자의 실수로 발생하는 예외.
: 필수적으로 예외처리해야 한다.
: 컴파일 시점에 예외를 확인한다.
자바가 제공하는 예외처리
예외처리
:프로그램의 비정상 종료를 막기위해 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비하여 코드를 작성 한 것.
try-catch
try {
//예외가 발생할 가능성이 있는 문장
} catch(Exception1 e1) {
//Exception1이 발생했을경우 이를 처리하기 위한 문장.
} catch(Exception2 e2) {
//Exception2이 발생했을경우 이를 처리하기 위한 문장.
}
예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.\
- try-catch 흐름
- 예외가 발생할 경우
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. catch블럭이 있을경우 catch블럭내 문장을 수행하고 try-catch문을 빠져나간다.
2-1. 찾지 못할 경우 예외발생.
-예외가 발생하지 않을 경우
1.catch블럭을 가지 않고 try-catch문을 나간다.
jdk 1.7부터 catch블럭을 | 기호를 사용하여 하나의 catch블럭으로 합칠 수 있게 되었다. 이를 멀티 catch블럭이라 한다.
이때 |기호로 연결된 예외 클래스가 조상과 자손의 경우 컴파일 에러가 발생한다.
throw
키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다.
- new연산자를 통해 예외클래스 객체 생성.
- throw 키워드를 통해 예외 발생.
throws
예외를 메서드에 선언할려면 메서드 선언부에 키워드 throws를 사용해서 예외를 적어주면 된다. 여러개일 경우에는 ,로 구분한다.
void method() throws Exception1, Exception2 {}
finally 블럭
try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용한다.
try {
} catch (Exception1 e1) {
} finally {
//예외의 발생여부에 관계없이 항상 수행되어야 한다.
}
try-with-resource
JDK1.7부터 추가되어서 입출력과 관련된 클래스에서 사용되어진다.
//JDK 1.7이전 자원 해제
public static void main(String args[]) throws IOException {
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream("file.txt");
bis = new BufferedInputStream(is);
int data = -1;
while((data = bis.read()) != -1){
System.out.print((char) data);
}
} finally {
// close resources
if (is != null) is.close();
if (bis != null) bis.close();
}
}
//try-with-resource
public static void main(String args[]) {
try (
FileInputStream is = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(is)
) {
int data = -1;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
try() 괄호안에 반환해주어야할 객체를 선언하면 try문을 벗어날시 close가 실행된다.
try-with-resources에서 자동으로 close가 호출되는 것은 AutoCloseable을 구현한 객체에만 해당이 된다.
커스텀한 예외처리
class MyException extends Exception {
MyException(String msg) {
super(msg);
}
}
Exception 클래스를 상속받아서 커스텀한 예외를 만들 수 있다.
Exception과 Error의 차이
프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료가 되는 경우가 있다. 이때 이러한 결과를 일으키는 원인을 프로그램 에러 또는 오류라고 한다.
에러에는 다음과 같은 3가지 종류가 있다.
- 컴파일 에러 : 컴파일 시에 발생하는 에러
- 런타임 에러 : 실행시에 발생하는 에러
- 논리적 에러 : 실행은 되지만 의도와 다르게 동작하는 것.
자바에서는 실행 시 발생할 수 있는 프로그램 오류를 Error와 Exception 두가지로 구분하였다.
Error = 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
Exception = 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
자바가 제공하는 예외 계층 구조
위의 계층 구조를 2가지로 나누어 볼 수 있다.
Checked Exception vs Unchecked Exception
UnChecked Exception(RuntimeException클래스와 자식들)
: 프로그래머의 실수로 발생하는 예외
: 예외처리를 강제화하지 않는다.
: 런타임 시점에 예외를 확인한다.
Checked Exception(Exception클래스들(RuntimeExcpetion과 자식들 제외) )
: 사용자의 실수로 발생하는 예외.
: 필수적으로 예외처리해야 한다.
: 컴파일 시점에 예외를 확인한다.
자바가 제공하는 예외처리
예외처리
:프로그램의 비정상 종료를 막기위해 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비하여 코드를 작성 한 것.
try-catch
try {
//예외가 발생할 가능성이 있는 문장
} catch(Exception1 e1) {
//Exception1이 발생했을경우 이를 처리하기 위한 문장.
} catch(Exception2 e2) {
//Exception2이 발생했을경우 이를 처리하기 위한 문장.
}
예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.\
- try-catch 흐름
- 예외가 발생할 경우
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. catch블럭이 있을경우 catch블럭내 문장을 수행하고 try-catch문을 빠져나간다.
2-1. 찾지 못할 경우 예외발생.
-예외가 발생하지 않을 경우
1.catch블럭을 가지 않고 try-catch문을 나간다.
jdk 1.7부터 catch블럭을 | 기호를 사용하여 하나의 catch블럭으로 합칠 수 있게 되었다. 이를 멀티 catch블럭이라 한다.
이때 |기호로 연결된 예외 클래스가 조상과 자손의 경우 컴파일 에러가 발생한다.
throw
키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다.
- new연산자를 통해 예외클래스 객체 생성.
- throw 키워드를 통해 예외 발생.
throws
예외를 메서드에 선언할려면 메서드 선언부에 키워드 throws를 사용해서 예외를 적어주면 된다. 여러개일 경우에는 ,로 구분한다.
void method() throws Exception1, Exception2 {}
finally 블럭
try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용한다.
try {
} catch (Exception1 e1) {
} finally {
//예외의 발생여부에 관계없이 항상 수행되어야 한다.
}
try-with-resource
JDK1.7부터 추가되어서 입출력과 관련된 클래스에서 사용되어진다.
//JDK 1.7이전 자원 해제
public static void main(String args[]) throws IOException {
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream("file.txt");
bis = new BufferedInputStream(is);
int data = -1;
while((data = bis.read()) != -1){
System.out.print((char) data);
}
} finally {
// close resources
if (is != null) is.close();
if (bis != null) bis.close();
}
}
//try-with-resource
public static void main(String args[]) {
try (
FileInputStream is = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(is)
) {
int data = -1;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
try() 괄호안에 반환해주어야할 객체를 선언하면 try문을 벗어날시 close가 실행된다.
try-with-resources에서 자동으로 close가 호출되는 것은 AutoCloseable을 구현한 객체에만 해당이 된다.
커스텀한 예외처리
class MyException extends Exception {
MyException(String msg) {
super(msg);
}
}
Exception 클래스를 상속받아서 커스텀한 예외를 만들 수 있다.