-
231028_Java 8장Individual Learning/Java 2023. 10. 28. 13:00
8장 예외처리 구조
프로그램 오류 (3가지)
프로그램 실행 중 발생할 수 있는 에러는 컴파일 에러, 런타임 에러, 논리적 에러로 총 세가지다.
컴파일 에러는 컴파일 시 발생하는 에러로, 비유하자면 컴파일 에러는 실행 전, 시스템상으로 문법이 맞지 않거나 오타 등올 인해 발생하는 에러다.
런타임 에러는 실행 시 발생하는 에러다. 수를 0으로 나누는 경우 발생하는 에러와 같은 것이다. Java 에서는 실행 시 발생할 수 있는 오류를 에러와 예외로 구분하고 있다. 프로그램 코드에 의해 수습 할 수 없는 심각한 오류를 에러(error), 프로그램 코드에 의해 수습될 수 있는 미약한 오류를 예외(exeption)이다.
논리적 에러는 실행은 되지만 의도와 다르게 동작하는 것이다. 즉 컴파일과 실행이 되었지만 사람의 나이가 음수로 나오는 등 의도한 것과 다르게 동작하는 것이라고 볼 수 있다.
예외처리 try-catch 문
예외처리란 프로그램 실행 시 발생할 수 있는 예외 발생에 대비한 코드를 작성하는 것이며, 이 목적은 예외 발생으로 인한 실행 프로그램의 비정상 종료를 막고 실행상태를 유지하기 위함이다. 예외를 처리하지 못하면 프로그램은 비정상적으로 종료된다.
class Ex8_2 {
public static void main(String args[]) {
System.out.println(1);
try {
System.out.println(0/0); //예외 발생
System.out.println(2);
//예외 발생으로 실행되지 않는다.
} catch (ArithmeticException ae) {
System.out.println(3);
//예외 발생으로 catch가 실행된다.
}
System.out.println(4);
}
}
class Ex8_1 {
public static void main(String args[]) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
} catch (Exception e) {
System.out.println(4);
// 발생한 예외가 없으므로 실행되지 않는다.
}
System.out.println(5);
}
}
try 블럭 내에서 예외가 발생할 경우 (좌)
1. 발생한 예외와 일치하는 catch 블럭이 있는지 확인한다.
2. 일치하는 cathc블럭이 있다면 해당 블럭 내의 문장을 수행한 뒤 전체 try-catch문을 빠져나와서 다음 코드를 실행한다. (만일 일치하는 catch블럭을 찾지 못하면 예외는 처리되지 못하고 프로그램이 종료된다.)
try블럭 내에서 예외가 발생하지 않은 경우(우)
1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 다음 코드를 실행한다.finally블럭
예외 발생여부와 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용하며, try-catch 문의 끝에 선택적으로 덧붙여 사용한다. 예외가 발생할 경우 try->catch->finally 순으로 실행되고, 예외가 발생하지 않게 될 경우에는 try->finally 순으로 실행된다. 프로그램 설치 코드로 설치를 진행하는 경우를 가정한다면, 설치를 정상적으로 마쳐도 임시 파일을 삭제해야 하고 예외가 발생해도 임시파일을 삭제해야 할 때 사용할 수 있다.
try{
statInstall();
copyFiles();
deleteTempFiles();
//프로그램 설치에 사용된 임시파일을 삭제한다.
} catch (Exception e) { //예외가 발생했을 경우 실행
e.printStackTrace();
deleteTempFiles();
//프로그램 설치에 사용된 임시파일을 삭제한다. 중복코드.
}try{
statInstall();
copyFiles();
} catch (Exception e) {
e.printStackTrace();
} finally {
deleteTempFiles();
//프로그램 설치에 사용된 임시파일을 삭제한다.
}
최소 요약한 내용은 모두 암기할 것.
'Individual Learning > Java' 카테고리의 다른 글
좋은 수 구하기 (0) 2023.11.13 231101_Java 2장~8장 정리 (0) 2023.11.01 231026_Java 5장 (0) 2023.10.26 231026_Java 3장, 4장 (0) 2023.10.26 231025_Java 2장 (0) 2023.10.26