[30] 예외처리
30.1. 프로그램에서의 오류
- 컴파일 오류 (compile error)
- 프로그램 코드 작성 중 발생하는 문법적 오류
- 대부분의 컴파일 오류는 detection 됨
- 실행 오류 (runtime error)
- 실행 중인 프로그램이 bug로 인해 이상 동작을 하거나 프로그램이 중지 되는 오류
- 비정상 종료가 되는 경우 => 시스템의 심각한 장애 발생
30.2. 오류 (error)
- 시스템 오류
- 동적 메모리가 없는 경우, 스택 메모리 오버플로우 등
- 프로그래머가 처리 할 수 없는 오류 임
- 예외(Exception)
- 프로그래머가 제어할 수 있는 오류
- 예) 읽어들이려는 파일이 존재하지 않거나, 네트웍이나 DB 연결이 안되는 경우 등
- 자바는 안전성이 중요한 언어로 대부분 예외로 인한 오류에 대해 예외 처리를 해야함.
30.3. 예외(Exception) 처리 중요성
- 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함
30.4. 예외 클래스들
- 모든 예외 클래스들의 최상위 클래스
- Exception
- IOException (입출력 예외 처리)
- FileNotFoundException
- SocketException
- RuntimeException (실행 오류 예외 처리)
- ArithmeticException : 정수를 0으로 나눈 경우 발생
- ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우
- NullPointerException : 초기화 되지 않은 Object를 사용하는 경우
- IOException (입출력 예외 처리)
- Exception
30.5. 예외 처리하기 / 미루기
try ~ catch 문
try { 예외가 발생할 수 있는 코드 } catch (처리할 예외 타입 e) { try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분 }
try ~ catch - finally 문
try { 예외가 발생할 수 있는 코드 } catch (처리할 예외 타입 e) { try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분 } finally { 예외 발생 여부와 상관없이 항상 수행 되는 부분 리소스를 정리하는 코드를 주로 씀 }
- finally 블럭에서 파일을 닫거나 네트웍을 닫는 등의 리소스 해제 구현을 함
- try{} 블럭이 수행되는 경우, finally{} 블럭은 항상 수행 됨
- 여러 개의 리소스를 사용하는 경우 각각 해제하지 않고 finally 블록에서 해제하도록 구현함
try-with resources
- 리소스를 사용하는 경우 close() 하지 않아도 자동으로 해제 되도록 함
- 리소스를 try() 내부에서 선언해야만 함
- 자바 9부터 리소스는 try() 외부에서 선언하고 변수만을 try(obj)와 같이 사용할 수 있음
- close()를 명시적으로 호출하지 않아도 해당 열린 리소스는 정상적인 경우나 예외가 발생한 경우 모두 자동으로 해제됨
- 해당 리소스 클래스가 AutoCloseable 인터페이스를 구현 해야 함
- FileInputStream는 AutoCloseable을 구현하고 있음
throws
- try ~ catch 블록으로 예외를 처리하지 않고, 메서드 선언부에 throws를 추가
- 예외가 발생한 메서드에서 예외 처리를 하지 않고 이 메서드를 호출한 곳에서 예외 처리를 한다는 의미.
30.6. try{} 블록은 하나이고 예외가 여러개 발생할 경우
- Exception 클래스를 활용하여 default 처리를 할때 Exception 블록은 맨 마지막에 위치해야 함.
- 각각의 예외를 따로 처리할 수 있음
- 예외를 묶어서 하나의 방법으로 처리할 수 도 있음
30.7. 사용자 정의 예외 클래스 구현
- 자바에서 제공되는 예외 클래스(360여개) 외에 프로그래머가 직접 만들어야 하는 예외가 있을 수 있음.
- 기존 예외 클래스 중 가장 유사한 예외 클래스에서 상속받아 예외 클래스를 만듦
- 기본적으로 Exception 클래스를 상속해서 만들 수 있음
'JAVA' 카테고리의 다른 글
[JAVA]자바 IO (2) (0) | 2023.02.11 |
---|---|
[JAVA]자바 IO (1) (0) | 2023.02.11 |
[JAVA]스트림 (0) | 2023.02.10 |
[JAVA]함수형 프로그래밍 (2) (0) | 2023.02.09 |
[JAVA]함수형 프로그래밍 (1) (0) | 2023.02.09 |
댓글