Don't give up!

[JAVA] 자바의 정석 정리(8장) 본문

개발서적/JAVA의 정석

[JAVA] 자바의 정석 정리(8장)

Heang Lee 2021. 5. 16. 01:01
자바의 정석을 읽고 정리한 내용입니다.

Java의 정석 - YES24

 

Java의 정석

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com


1. 예외처리

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

(2) 자바에서 정의한 Exception, Error 클래스는 Throwable 클래스를 상속받았으며, Throwable 클래스도 Object 클래스의 자손 클래스이다.

(3) RuntimeException 클래스는 프로그래머의 실수로 발생하는 예외들로 이루어져 있음. (RuntimeException클래스들을 제외한 Exception 클래스들은 사용자들의 동작에 의해 발생하는 예외들)

(4) RuntimeException 클래스들은 예외처리를 강제하지 않는다. (예외처리 없어도 컴파일이 이루어진다)

(5) 예외처리(Exception Handling)은 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것. 예외의 발생으로 인한 프로그램의 비정상 종료를 막고 정상적인 실행 상태를 유지하기 위함.

(6) 발생한 예외를 처리하지 못하면 프로그램은 비정상 종료되며 JVM의 예외처리기(UncaughtExceptionHandler)가 예외의 원인을 화면에 출력한다.

2. Try-Catch

(1) try-catch문은 발생한 예외의 종류와 일치하는 단 한 개의 catch 블럭만 수행된다.

(2) 메서드 내에 여러개의 try-catch문이 사용될 수 있으며 try-catch 블럭에 다른 try-catch문이 포함될 수 있음.

(3) try-catch블럭 괄호 내에 선언된 변수는 catch 블럭 내에서만 유효하다. 단, catch 블럭 내에 또 하나의 try-catch문이 포함된 경우 같은 이름의 참조변수를 사용해서는 안된다.

(4) Catch 블럭에서 Exception 클래스로 만들어진 참조변수에 접근할 수 있다. 

(5) printStackTrace()는 예외발생 당시의 호출 스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다. (파일에 예외의 정보를 저장할 수 있음)

(6) getMessage()는 발생한 예외클래스의 인스턴스에 저장된 메시지를 반환한다.

(7) 멀티 catch블럭은 '|'기호를 이용해서 중복된 코드를 줄일 수 있다. 단, 연결된 예외 클래스가 상속 관계에 있다면 컴파일 에러가 발생한다.(불필요한 코드임을 의미함)

(8) 멀티 catch 블럭에 연결된 예외 클래스들은 공통 분모인 조상 예외 클래스에 선언된 멤버만 사용할 수 있다.

(9) instanceof로 예외의 타입을 확인하고 이에 해당하는 자손 예외 클래스로 형변환 함으로서 자손 예외 클래스의 멤버를 사용할 수 있음.

3. 예외 발생

(1) throw 키워드는 고의로 예외를 발생시킬 수 있다.

(2) throw new 'Exception 클래스'("에러 메시지");를 통해 발생시킬 수 있음.

(3) 메서드 선언부에 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 작성할 수 있다. (메서드의 사용자가 어떤 예외를 처리해야하는지 쉽게 알 수 있음.)

(4) JAVA API문서에서 발생할 수 있는 예외와 반드시 처리해야하는 예외를 확인할 수 있다.

(5) 메서드의 예외를 선언할 때 일반적으로 RuntimeException클래스들은 작성하지 않는다.( 예외처리를 강제하지 않기 때문)

(6) 메서드에 throws를 작성하였다는 것은 예외처리를 떠맡기는 것이다. main메서드에서조차 예외처리가 이루어지지 않았을 경우 프로그램이 비정상적으로 종료된다. (어느 한 곳에서는 try-catch문으로 예외처리를 해야함)

4. finally 블럭

(1) finally블럭은 예외의 발생여부에 관계없이 실행되어야할 코드를 포함시킬 목적으로 사용된다.

(2) try-catch-finally의 순서로 구성된다.

(3) try, catch 블럭에서 return문이 실행되는 경우에도 finally 블럭의 문장들이 먼저 실행되고 나서 return을 수행한다.

(4) try 블럭과 finally블럭에서 모두 예외가 발생하면 try 블럭의 예외는 무시된다.

5. try-with-resource

(1) try문에 괄호'( )'를 추가하고 코드를 작성할 수 있다. 해당 코드의 객체는 try블럭을 벗어나는 순간 자동적으로 close()가 호출된다.

(2) try( )과 try 블럭에서 동시에 예외가 발생한다면 try( )의 예외는 억제(Surpressed)된다. try 블럭의 예외에 억제된 예외에 대한 정보가 저장된다.

6. exception re-throwing

(1) 예외를 처리한 후에 인위적으로 다시 발생시키는 것을 예외 내던지기(exception re-throwing)라고 한다.

(2) catch문에서 필요한 작업을 행한 후에 throw문을 사용해서 예외를 다시 발생시키는 것.

(3) 다시 발생한 예외는 메서드를 호출한 메서드에게 전달되고 호출한 메서드의 try-catch문에서 예외를 다시 처리할 수 있다.

(4) 메서드에서 예외처리(try-catch)를 해줌과 동시에 메서드의 선언부에 발생할 예외를 지정해주어야한다.(throws)

7. chained exception

(1) 하나의 예외가 다른 예외를 발생시킬 수 있다. 

(2) catch문에서 새로운 예외를 생성하고(new), 예외를 던짐으로서(throw) 예외를 던진다.

(3) 여러가지 예외를 하나의 큰 분류의 예외로 묶어서 다루거나, checked 예외가 발생해도 예외를 처리할 수 없는 상황에서 unchecked 예외로 바꾸어 예외처리를 하지 않도록 할 수 있다.

8. 사용자 정의 예제

(1) Exception 클래스들을 상속받아 예외 클래스를 정의하여 사용할 수 있다.

(2) Exception 클래스의 생성자는 String을 매개변수로 받는다. (에러 메시지)

예외 특징
checked 예외 Exception을 상속받음. 예외처리가 반드시 필요함.
unchecked 예외 RuntimeException을 상속받음. 예외를 선택적으로 처리할 수 있음.

 

'개발서적 > JAVA의 정석' 카테고리의 다른 글

[JAVA] 자바의 정석 정리(9장)  (0) 2021.05.24
[Java] 자바의 정석 정리(7장)  (0) 2021.05.15
[JAVA] 자바의 정석 정리(6장)  (0) 2021.05.12