예외처리란 프로그램 실행 중에 발생할 수 있는 예외 상황을 미리 예측하고, 적절한 처리를 통해 프로그램의 비정상적인 종료를 방지하는 것입니다.

예외처리는 다음과 같은 장점이 있습니다.

  • 프로그램의 안정성과 신뢰성을 높일 수 있습니다.
  • 프로그램의 디버깅과 유지보수를 용이하게 할 수 있습니다.
  • 사용자에게 친절한 에러 메시지를 제공할 수 있습니다.

자바에서는 예외처리를 위해 try-catch-finally 구문과 throws 키워드를 제공합니다. try 블록은 예외가 발생할 가능성이 있는 코드를 작성하는 곳이고, catch 블록은 예외가 발생했을 때 처리하는 코드를 작성하는 곳입니다. finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드를 작성하는 곳입니다. throws 키워드는 메소드 선언부에 사용하여 해당 메소드가 발생시킬 수 있는 예외를 명시하는 것입니다.

예외는 크게 두 가지로 나눌 수 있습니다. 첫 번째는 컴파일러가 미리 체크해주는 체크 예외(Checked Exception)이고, 두 번째는 컴파일러가 체크하지 않고 런타임에 발생하는 언체크 예외(Unchecked Exception)입니다. 체크 예외는 반드시 try-catch 구문이나 throws 키워드로 처리해야 하며, 그렇지 않으면 컴파일 에러가 발생합니다. 언체크 예외는 처리하지 않아도 컴파일 에러가 발생하지 않지만, 런타임에 프로그램이 종료될 수 있으므로 주의해야 합니다.

체크 예외와 언체크 예외의 차이

  • 체크 예외는 컴파일 시점에 발견되고, 언체크 예외는 실행 시점에 발견됩니다.
  • 체크 예외는 외부적인 요인으로 인해 발생하고, 언체크 예외는 내부적인 요인으로 인해 발생합니다.
  • 체크 예외는 개발자가 반드시 처리해야 하고, 언체크 예외는 개발자가 선택적으로 처리할 수 있습니다.

모든 에러와 예외 클래스는 Throwable 클래스로부터 상속받습니다. Throwable 클래스의 자식 클래스로 Error 클래스와 Exception 클래스가 있습니다.

Error 클래스는 시스템의 심각한 오류를 나타내는 Error 클래스와 달리 Exception 클래스는 개발자가 처리할 수 있는 예외입니다. Exception 클래스의 자식 클래스로는 RuntimeException 클래스와 그 외의 일반 예외 클래스가 있습니다. RuntimeException 클래스는 컴파일러가 예외 처리를 강제하지 않는 언체크 예외이고, 그 외의 일반 예외 클래스는 컴파일러가 예외 처리를 강제하는 체크 예외입니다.

RuntimeException 클래스의 대표적인 예외들

  • NullPointerException: null 값을 가진 참조 변수로 객체에 접근하려 할 때 발생합니다.
  • ArrayIndexOutOfBoundsException: 배열의 인덱스 범위를 초과하여 사용하려 할 때 발생합니다.
  • NumberFormatException: 문자열을 숫자로 변환할 수 없을 때 발생합니다.
  • ClassCastException: 허용되지 않는 타입 변환을 시도할 때 발생합니다.

일반 예외 클래스의 대표적인 예외들

  • IOException: 입출력 작업을 실패하거나 중단될 때 발생합니다. 파일을 열거나 읽거나 쓰는 과정에서 문제가 생길 수 있습니다.
  • ClassNotFoundException: 지정한 이름의 클래스를 찾을 수 없을 때 발생합니다. 클래스 이름이 잘못되었거나 해당 클래스가 존재하지 않을 수 있습니다.
  • SQLException: 데이터베이스와 관련된 작업을 수행할 때 발생합니다. 데이터베이스 연결이 끊기거나 쿼리문이 잘못되었거나 데이터 형식이 맞지 않을 수 있습니다.

+ Recent posts