231028_Java 8장
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(); //프로그램 설치에 사용된 임시파일을 삭제한다. } |
최소 요약한 내용은 모두 암기할 것.