[자바 – Java] 예외처리 오류처리 try catch finally exception throw[자바 – Java] 예외처리 오류처리 try catch finally exception throw

함께 보면 좋은 정보들

[자바 – Java] 접근제어지시자, 정보은닉 – public, private, protected, default, get(), set(), this
[자바 – Java] 자바 배열 선언 정렬 출력 추가 복사 자르기
[자바 – Java] 생성자 (오버로딩-overloading, 오버라이딩-overriding)
[자바 – Java] 인터페이스 추상클래스 사용 이유 상속 예제 구현 implements
[자바 – Java] 스트림 연산 특징 filter map sorted

자바 예외처리

1. 프로그램에서의 오류: 자바 예외처리

 1) 컴파일 오류

– 프로그램 코드 작성 중 발생하는 문법적 오류가 있다.
– 대부분의 컴파일 오류는 detection 된다.

2) 실행 오류

– 실행 중인 프로그램이 버그로 인해 이상 동작을 하거나 프로그이 중지 되는 오류가 있다.
– 비정상 종료가 되는 경우 => 시스템의 심각한 장애가 발생할 수 있다.

2. 오류 (error)

1) 시스템 오류

– 동적 메모리가 없는 경우, 스택 메모리 오버플로우 등
– 프로그래머가 처리 할 수 없는 오류

2) 예외 (Exception)

– 프로그래머가 제어할 수 있는 오류. 예) 읽어들이려는 파일이 존재하지 않거나, 네트워크 이나 DB 연결이 안되는 경우 등
– 자바는 안전성이 중요한 언어로 대부분 예외로 인한 오류에 대해 예외 처리를 해야한다.

3. 예외(Exception) 처리 중요성

1) 프로그램의 비정상 종료를 피하여 시스템이 원활히 실행되도록 한다.

4. 예외 클래스들

1) 모든 예외 클래스들의 최상위 클래스

*** Exception
** IOException (입출력 예외 처리)
* FileNotFoundException
* SocketException

** RuntimeException (실행 오류 예외 처리)
* ArithmeticException : 정수를 0으로 나눈 경우 발생한다.
* ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우 발생한다.
* NullPointException : 초기화 되지 않은 Object를 사용하는 경우 발생한다.

5. 예외 처리하기 / 미루기

1) try ~ catch 문

try {
            예외가 발생할 수 있는 코드
} catch (처리할 예외 타입 e) {
          try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
}

2) try ~ catch ~ finally 문

try {
            예외가 발생할 수 있는 코드
        } catch (처리할 예외 타입 e) {
            try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
        } finally {
            예외 발생 여부와 상관없이 항상 수행되는 부분
            리소스를 처리하는 코드를 주로 씀
        }

– finally 블럭에서 파일을 닫거나 네트웍을 닫는 등의 리소스 해제 구현을 한다.
– try{} 블럭이 수행되는 경우, finally{} 블럭은 항상 수행된다.
– 여러 개의 리소스를 사용하는 경우 각각 해제하지 않고 finally 블록에서 해제하도록 구현한다.

3) try-with resources

– 리소스를 사용하는 경우 close() 하지 않아도 자동으로 해제 되도록 한다.
– 리소스를 try() 괄호 내부에서 선언해야한다. ex) try(resources) -> 자바 9부터 리소스는 try() 외부에서 선언하고 변수만을 try(obj)와 같이 사용할 수 있음.
– close()를 명시적으로 호출하지 않아도 열린 해당 리소스는 정상적인 경우나 예외가 발생한 경우는 자동으로 해제된다.
– 해당 리소스 클래스가 AutoCloseable 인터페이스를 구현해야한다. -> FileInputStream은 AutoCloseable를 구현하고 있다.

4) throws

– try ~ catch 블록으로 예외를 처리하지 않고, 메서드 선언부 throws를 추가한다.
– 예외가 발생한 메서드에서 예외처리를 하지 않고 이 메서드를 호출한 곳에서 예외 처리를 한다는 의미다.

6. try{} 블록은 하나이고 예외가 여러개 발생할 경우

1) Exception 클래스를 활용하여 default 처리를 할 때 Exception 블록은 맨 마지막에 위치해야한다.
2) 각각의 예외를 따로 처리할 수 있다.
3) 예외를 묶어서 하나의 방법으로 처리할 수도 있다.

7. 사용자 정의 예외 클래스 구현

1) 자바에서 이미 제공되는 예외 클래스 (360여개)외에 프로그래머가 직접 만들어야 하는 예외가 있다.
2) 기존 예외 클래스 중 가장 유사한 예외 클래스에서 상속받아 예외 클래스를 만든다.
3) 기본적으로 Exception클래스를 상속해서 만들 수 있다.