Error & Exception
Error 와 Exception의 차이
Error
시스템이 종료되어야 할 수준과 같이 수습할 수 없는 심각한 문제를 의미한다.
Exception
개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생한다.
Exception Handling
잘못된 하나로 인해 전체 시스템이 무너지는 결과를 방지하기 위한 기술적인 처리이다.
예외가 발생하는 주요 원인
사용자의 잘못된 데이터 입력
잘못된 연산
개발자가 로직을 잘못 작성
하드웨어, 네트워크 오작동
시스템 과부하
JAVA에서 모든 예외가 발생하면 xxxException 객체를 생성한다. 예외를 처리하는 방법에는 크게 2가지가 있다.
직접 try catch를 이용해서 예외에 대한 최종적인 책임을 지고 처리하는 방식
throws Exception을 이용해서 발생한 예외를 호출하는 쪽이 책임지는 방식
Throwable 클래스
https://gyoogle.dev/blog/computer-language/Java/Error%20&%20Exception.html
Throwable 클래스는 예외처리를 할 수 있는 최상위 클래스이다. Exception과 Error는 Throwable의 상속을 받는다.
Error
https://gyoogle.dev/blog/computer-language/Java/Error%20&%20Exception.html
시스템 레벨에서 발생하여, 개발자가 어떻게 조취할 수 없는 수준을 의미
OutOfMemory : JVM에서 설정된 메모리의 한계를 벗어난 상황일 때 발생. 힙 사이즈가 부족하거나 너무 많은 class를 로드할때, 가용가능한 swap이 없을때 큰 메모리의 native 메서드가 호출될때 등이 있다. 이를 해결하기 위해 dump파일분석, jvm 옵션 수정 등이 있다.
Exception
https://gyoogle.dev/blog/computer-language/Java/Error%20&%20Exception.html
예외는 개발자가 구현한 로직에서 발생하며 개발자가 다른 방식으로 처리가능한 것들로 JVM은 정상 동작한다.
Exception의 2가지 종류
Checked Exception
예외처리가 필수이며, 처리하지 않으면 컴파일되지 않는다. JVM 외부와 통신할 때 주로 쓰인다.
RuntimeException 이외에 있는 모든 예외
IOException, SQLException 등
Unchecked Exception
컴파일 때 체크되지 않고, Runtime에 발생하는 Exception을 말한다.
RuntimeException 하위의 모든 예외
NullPointerException, IndexOutOfBoundException 등
Throw 구문
예외처리를 할때 현재 메서드가 직접 처리하지 않고 호출한 곳에 발생 여부를 통보한다. 호출한 메서드는 이걸 다시 throw할지 처리할지 정해야 한다. return 보다 강력
try-with-resource
try()에 자원 객체를 선언해 사용하면, try 블록이 끝날 때 해당 자원을 자동으로 종료 해준다. 다만 AutoCloseable 인터페이스가 구현된 객체여야 사용 가능하다.