[JAVA]예외처리기법3가지 및 Error와 Exception 차이
💡 핵심 요약 (TL;DR)
* 발생하면 복구하거나 되돌릴 수 없는 심각한 상황.으로 인해 문제가 발생했다. * 처리방법 : 오류를 발생하는 요인을 찾아서 업애는 디버깅. 조치를 적용했다.
1. 오류 Error
- 발생하면 복구하거나 되돌릴 수 없는 심각한 상황.
- 발생상황 예시 : 메모리부족, 메서드끼리 호출을 무한반복등등.
- 처리방법 : 오류를 발생하는 요인을 찾아서 업애는 디버깅.
- 예방법 : 코드 짜임새있게 짜기.
즉, 프로그램을 잘 짜는 것만이 대안이기때문에 예외처리와 무관하다.
2. 예외 Exception
- 오류와 비교하면 심각도가 낮으며 프로그램의 정상적인 흐름을 방해하는 상황.
- 발생상황 예시 : 네트워크 연결 끊기는 상황, 해당 파일을 읽지 못하는 상황등등.
- 예외처리란 : 예외가 발생했을때 비정상적인 종료를 막고 계속해서 사용할 수 있도록 처리하는 것
- 예외처리 라이브러리 = 최상위 클래스 = Throwable
- RuntiomeException = unchecked Exception : 중간에 throws 할 필요없다
- 그 외 예외 = checked Exception
3. 예외 처리 기법
3-1. try catch finally구문
- 단축키 : ctrl + space
- try catch finally :
- finally블록은 무조건 실행. 예외 발생 여부와 상관없이 반드시 실행되어야하는 내용을 작성.
- 심지어 return문을 만날때에도 먼저 finally 블록을 실행 후 메서드가 리턴된다.
- finally 주요 목적 : try블록에서 사용한 시스템 자원(System Resource)의 반납처리.
1 | public class TryCatchFinallyFlow { |
3-2. Exception 객체 정보 활용
- getMessage()사용
1 | public class SimpleException { |
- printStackTrace()사용
1 | public class SimpleException { |
3-3. try with resources 구문
- try catch finally 코드가 길다.
- 따라서 java 7버전에서 새롭게 추가된 기능이 try with resources구문이다.
1 | try (리소스타입1 res1 = 초기화; 리소스타입2 res2 = 초기화; ...){ |
4. throws 키워드를 통한 예외처리 위임
예외 처리의 두번째방법은 throws 키워드를 통한 위임 또는 전달이다.
- throws 키워드
- throws는 메서드에서 처리해야 할 하나 이상의 예외를 메서드를 호출한 곳으로 던져버린다.
- 이러한 위임은 처리와는 다름.
- 첫번째 방법이었던 try catch 에서 catch블록은 예외를 처리해서 없애 버림
- BUT 위임은 예외를 없애지 못하고 그냥 호출한 곳으로 예외를 전달만 함.
- 예외를 전달받은 메서드는 다시 예외 처리 책임이 발생함.
- throws를 왜 사용할까?
- 항상 try catch로 처리하는 것은 좋지않다
- WHY? 특히 API나 다른 모듈에서 사용되는 기능을 제공하는 경우 예외를 전달해서 그 예외에 대해 적절히 대응할 수 있는 코드를 작성할 수 있게 해줄 필요가 있기때문이다.
- 예 : 어떤 프로그램을 install할때
5. 사용자 정의 예외
- 예외가 unchecked exception계열이면 중간에 throws절차가 필요없다. (ex : runtiomeException)
- 고급스러운 코딩이 가능하다.
6. throw와 throws 차이
둘 다 Exception을 발생시키지만 큰 차이가 있다.
- throws : 예외를 위임하는 예약어
- throw : 억지로 예외를 발생시키는 예약어, 즉 사용자 정의에 의한 exception = 인위적인 exception이다.
- 생성자에 exception을 넣으면 예외 문구로 출력된다.
1 | throw = new throw("나만의 예외메세지"); |
#TIL
[JAVA]예외처리기법3가지 및 Error와 Exception 차이