예외처리는 왜 하죠?
예외 처리의 중요성
프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함
실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘들다
오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요
try-catch문
try {
예외가 발생할 수 있는 코드 부분
}catch(처리할 예외 타입e){
try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
}
try-catch-finally문
- finally블럭에서 파일을 닫거나 네트웍을 닫는등의 리소스 해제 구현을 함(소켓을 계속 열고 사용할 수 없음 시스템에서 사용할 수 있는 소켓이 한정적임)
- tyr{}블럭이 수행되는 경우, finally{}블럭은 항상 수행 됨
- 여러개의 예외 블럭이 있는 경우 각각에서 리소스를 해제하지 않고 finally 블록에서 해제하도록 구현함
try-with-resources문
- 리소스를 사용하는 경우 close()하지 않아도 자동으로 해제되도록 함
- 자바 7부터 제공되는 구문
- 리소스를 try()내부에서 선언해야만 함
- close() 명시적으로 호출하지 않아도 try()블록에서 열린 리소스는 정상적인 경우나 예외가 발생한 경우 모두 자동으로 해제 됨
- 해당 리소스는 클래스가 AutoCloseable 인터페이스를 구현 해야함
- FileInputStream의 경우에는 AutoColseable을 구현하고 있음
- 자바 9부터 리소스는 try() 외부에서 선언하고 변수만을 try(obj)와 같이 사용할 수 있음
예외처리 미루기
- throw를 이용하면 예외가 발생할 수 있는 부분을 사용하는 문장에서 예외를 처리할 수 있음