본문 바로가기
Study/Java Study

자바스터디 6주차 (1)

by hongchii 2021. 6. 15.
728x90
반응형

2021.06.13 - [Study/Java Study] - 자바스터디 5주차 (2) - [스터디관리 프로그램 구현]

자바스터디 5주차 (2) - [스터디관리 프로그램 구현]

2021.06.11 - [Study/Java Study] - [자바스터디] 5주차 (1) [객체지향으로 스터디관리 프로그램 만들기] - 조건 (흐름) [자바스터디] 5주차 (1) [객체지향으로 스터디관리 프로그램 만들기] - 조건 (흐름) 2021.0

hong-chii.tistory.com

1. 예외처리


1.1 프로그램 오류

프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우를 프로그램 에러 또는 오류라고 한다.

컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행 시에 발생하는 에러
논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것


자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 '에러(error)'와 '예외(exception)' 두가지로 구분한다.

에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

1.2 예외 클래스의 계층구조

Exception과 Error클래스도 Object클래스의 자손이다.

모든예외의 최고 조상은 Exception클래스이다.

Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외

1.3 예외처리하기 - try -catch문

예외처리(exception handling)
정의 : 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

예외를 처리하기 위한 try-catch문

try { // 예외가 발생할 가능성이 있는 문장들을 넣는다. } catch (Exception1 e1) { // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다. } catch (Exception2 e2) { // Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다. } catch (Exception eN) { // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다. }

하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭만 수행된다. 발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않는다. < try블럭이나 catch블럭 내에 포함된 문장이 하나여도 괄호{}를 생략할 수 없다. >

class ExceptionEx1 { public static void main(String[] args) { try { try { } catch (Exception e) { } } catch (Exception e) { try { } catch (Exception e) { } // 에러. 변수 e가 중복 선언되었다. } // try-catch의 끝 try { } catch (Exception e) { } // try-catch의 끝 } } 

1.4 try-catch문에서의 흐름

try블럭 내에서 예외가 발생한 경우,

1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행, 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.



try블럭 내에서 예외가 발생하지 않은 경우,

1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.

1.5 예외의 발생과 catch블럭

printStackTrace()와 getMessage()를 통해 예외에 대한 정보를 얻을 수 있다.

printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.


1.6 예외 발생시키기

throw를 사용해서 고의로 예외를 발생시킬 수 있다.

1.7 메서드에 예외 선언하기

void method() throws Exception1, Exception2, ... ExceptionN P //메서드 내용 }


1.8 finally블럭

try { // 예외가 발생할 가능성이 있는 문장들을 넣는다. } catch (Exception e1) { // 예외처리를 위한 문장을 적는다. } finally { // 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다. // finally블럭은 try-catch문의 맨 마지막에 위치해야한다. }

예외가 발생한 경우에는 'try -> catch -> finally'의 순으로 실행되고, 예외가 발생하지 않은 경우에는 'try -> finally' 순으로 실행된다.

https://github.com/hongchii/Study_Java/tree/master/src/Ch8

hongchii/Study_Java

자바의 정석 예제 및 인프런 Java TPC. Contribute to hongchii/Study_Java development by creating an account on GitHub.

github.com



자바의 정석을 토대로 공부 후 정리한 내용입니다.

728x90
반응형

댓글