-
[JAVA] 예외처리자바 2023. 5. 7. 14:07
java에서 예외는 크게 error, runtimeException, OtherException
1) error : 메모리부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)처럼 JVM이나 하드웨어 등 시스템의 문제로 발생하는 것을 의미한다. 즉, 개발자가 처리할 수 있는 영역이 아니기 때문에 error 발생하면 프로그램을 종료시키는 것이 보통이다.
error <-> excpetion : 개발자가 프로그램을 처리할 수 있는지에 대한 여부
exception <---- runtimeExcption <-> otherException : 컴파일러가 예외 처리 할 수 있는지 여부
2) runtimeException : error와 함께 컴파일러가 예외 체크를 하지 않는다. (unchecked Excpetion)
3) otherException : 컴파일러가 예외 체크를 한다. (checked Excpetion)
3 - 해결방법)
3-1) 예외를 잡아서 그 자리에서 해결하는 방법 : try-catch-finally
3-2) 메서드가 예외를 발생시킨다고 기술하는 방법 : throws + 예외 종류
> 이런 예외 처리 동작은 호출 스택을 통해 수행된다. 기본적으로 메서드를 호출하면 메서드들은 호출 스택에 쌓이게 된다. 따라서 마지막 호출한 메서드부터 역순으로 올라가면서 예외 처리를 구현한 메서드를 찾아가는 것이다.
>> throws를 통해 상위 메서드에게 예외 처리를 넘겨주는 방식은 try-catch 블록 등을 통해 예외를 직접 처리하는 것보다 코드가 간결해질 수 있으며 더 효율적일 수 있다. 하지만 자신에게 발생한 예외를 다른 곳에서 처리하도록 책임을 넘기는 방식이기 때문에 반드시 상위 메서드에서 책임을 지도록 구현해 줘야 한다.
cf. throw 키워드 사용 예외 처리
throw 문장은 throwable 객체 하나의 인수만을 요구한다. 따라서 적합한 예외 객체를 생성하여 던져주면 된다.
ex. throw new IOException()
ex. throw new NullPointException()
>>>> 예외 처리로 어떤 부분에서 예외 발생했는지 개발자가 쉽게 알 수 있으며 예외 처리 코드와 정상적인 코드를 나눠서 가독성도 높일 수 있다.
>>>> 하지만 예외 검사하고 처리하는 비용이 적은 편이 아니다. 따라서 충분히 해결할 수 있다면 Exception 처리보다는 return -1, 0, 1 방식처럼 return type 등 다른 간단한 방법을 이용하는 것이 좋다
(참고)
728x90'자바' 카테고리의 다른 글
[JAVA] Object 클래스 (0) 2024.08.19 [JAVA] 생성자 (0) 2024.08.14 [JAVA] path 클래스 (0) 2023.05.06 [JAVA] 파일 읽고쓰기, BufferedWriter 파라미터로 넘기기 (0) 2023.04.29 [JAVA] try-catch-finally 구문 (0) 2023.04.28