에러는 컴파일시 문법적인 오류와 런타임시 널포인트 참조와 같은 오류로 프로세스에 심각한 문제를 야기시켜 프로세스를 종료시키는 것을 말합니다. 메모리 부적이나 스택오버플로우같이 발생하면 복구할 수 없는 심각한 오류를 말합니다.
예외는 컴퓨터 시스템 동작도중 예기치 않은 이상상태가 발생해서 수행중인 프로그램이 영향을 받는 것을 말합니다. 예외가 발생하더라도 수습할 수 있는 비교적 덜 심각한 오류로 프로그래머가 적절히 코드를 작성해주면 이를 막을 수 있습니다.
에러의 상황을 미연에 방지하기 위해서는 Exception 상황을 만들수 있고 자바에서는 try-catch문으로 Exception handling을 할 수 있습니다.
잘못된 하나로 인해 전체 시스템이 무너지는 결과를 방지하기 위한 기술적인 처리입니다.
사용자의 잘못된 데이터 입력 / 잘못된 연산 / 개발자가 로직을 잘못 작성하는 경우 / 시스템 과부화 등
--
Throwable 클래스는 예외처리를 할 수 있는 최상위 클래스입니다.Exception과 Error는 Throwable의 상속을 받습니다.
에러는 시스템 레벨에서 발생하고 개발자가 조치할 수 없는 수준을 말합니다.
예외는 개발자가 구현한 로직에서 발생하고 개발자가 다른 방식으로 처리가능한 것들로 jvm은 정상 동작합니다.
예외처리가 필수이며 처리하지않으면 컴파일되지 않습니다. JVM 외부와 통신할때 (네트워크나 파일 시스템 등) 주로 쓰입니다.
RuntimeException 이외의 모든 예외
IOException, SQLException 등
RuntimeException 하위의 모든 예외
NullPointerExcetion, IndexOutOfBoundException
printStackTrace() : 발생한 예외의 출처를 메모리상에서 추적하면서 결과를 알려줍니다. 발생한 위치를 정확히 알려줘서 제일 많이 쓰입니다.
getMessage() : 한줄로 요약된 메세지를 String으로 변환해줍니다.
getStackTrace() : jdk 1.4부터 지원하며 printStackTrace()를 보완하고 StackTraceElement[] 라는 문자열 배열로 변경해서 출력하고 저장합니다.
Java에서는 예외가 발생하면 ~Exception이라는 객체를 생성합니다. 예외를 처리하는 방법에는 크게 두가지가 있습니다.
로직 중 예외가 발생할지 모르는 부분에 try-catch문을 작성해서 처리합니다.
try에는 위험한 로직이 들어가고 catch에는 예외발생시 수행할 로직이 들어갑니다. try 문을 돌고있어도 예외가 발생한다면 이후의 코드는 실행되지 않고 catch문으로 넘어갑니다. catch문은 else if처럼 여러개 사용할 수 있습니다. finally는 예외가 발생하던 안하던 가장 마지막에 실행되는 로직이며 대표적으로 .close()가 있습니다.
return보다 강력하며 현재 메소드에서 예외의 책임을 지지않아 직접 처리하지 않고 호출한 쪽에 예외발생여부를 통보합니다. 또 호출한 메서드에서는 직접 처리할지 아니면 다시 예외를 던질지 결정합니다.