본문 바로가기

프로그래밍/Java

7. 예외처리

7. 예외처리(exception handling)

프로그램에러(오류)

 - 프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우

 ▶ 컴파일 에러 : 컴파일 시에 발생하는 에러

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

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

실행시 발생할 수 있는 오류

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

 - 예외 : 프로그램 코드에 의해서 수습될 수 있는 미약한오류  

 → 예외는 예외처리를 통해서 프로그램의 비정상적 종료를 막을 수 있다.


Exception [Checked]

- 사용자의 실수, 외적 요인에 의해 발생하는 예외 (필수처리)

- 컴파일러가 체크O, 컴파일시 에러O

RuntimeException[Unchecked]

- 프로그래머의 실수로 발생하는 예외 (선택처리)

- 컴파일러가 체크X, 컴파일시 에러X


예외처리의 정의와 목적

- 정의 : 예외의 발생에 대비한 코드를 작성하는 것이다

- 목적 : 비정상적인 종료를 막는것이다


예외처리하기 ㅡ try-catch문    - 예외처리방법1

 try { //예외가 발생할 가능성이 있는 문장을 넣는다.}

 catch(Exception1 e1){ //Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다}

 - 예외가 발생한 경우 → catch문 실행, 만약 일치하는 catch문이 없으면 예외는 처리되지 못한다.

 - 예외가 발생하지 않은경우 → catch문 실행X, 수행을 계속함.

 + ArithmeticException 클래스는 Exception의 자손이므로 Exception클래스의 참조변수로 예외처리가 가능하다.


발생한 예외 정보다루기

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

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

 → 예외클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨있다.

 → 발생한 예외 객체를 catch 블럭의 참조변수로 접근할 수 있다, (catch 블럭 내에서만 참조변수 사용가능)


예외발생시키기 : throw

 1. 예외 클래스의 객체 생성 후   // Exception e = new Exception("고의로 발생시켰음");

 2. 키워드 throw를 이용해서 예외를 발생시킨다. // throw e;


메서드에 예외선언하기 : throws  -  예외처리방법2

 - 사실상 예외를 처리하는 것이 아닌, 호출한 메서드로 전달하는 것

  → 호출한 메서드에서 예외처리를 해야만 할 때 사용한다.

--예제 8-12--p429--

예외처리방법

 1) try-catch

 2) 예외선언하기 - throws


finall블럭 (선택적 사용)

 - 예외 발생여부와 관계없이 실행되어야 하는 코드를 넣는다.

 - 예외 발생시 : try→catch→finally

 - 예외 미발생시 : try→finally // 중간에 return문을 만나도 fianlly블럭을 수행한다.


사용자정의 예외 만들기 : 기존에 정의된 예외클래스 외의 새로운 예외클래스를 정의하는 것

 → 이런것이 가능하다. 하지만 가능하면 기존것을 사용하는 것이 좋다.


예외 되던지기 : 예외처리 후(호출 당한곳) 다시 예외를 발생시켜서 다시 예외처리(호출시킨곳)를 하는 것

--예제 8-22--p442-


연결된예외

 1) 여러 예외를 묶을 때   


2) Checked(필수) → UnChecked(선택)예외로 바꿀 때  

 → Exception의 자손은 반드시 예외처리를 해야하는데 RuntimeException으로 묶으면 UnChecked가 되서

     예외처리를 선택으로 할 수 있게된다.


'프로그래밍 > Java' 카테고리의 다른 글

9. 날짜와 시간 & 형식화  (0) 2018.05.07
8. java.lang패키지와 유용한클래스  (0) 2018.05.07
6.객체지향개념2  (0) 2018.05.06
5. 객체지향개념  (0) 2018.05.01
4. 배열  (0) 2018.05.01