본문 바로가기
Java

[Java] Java 예외 처리

by 도전하는 린치핀 2024. 3. 19.

0. Java의 예외처리 

개발을 잘한다는 사람들은 기본적으로 원하는 로직을 바로 설계하여 코드를 뚝딱뚝딱 작성하는 것을 의미할 수 있다.

하지만 개발을 잘한다는 것은 얼마나 예측 불가능한 런타임 에러를 발생시키지 않고 원하는 로직을 완성하는냐를 의미할 수도 있다.

이때 예측 불가능한 런타임 에러를 없애는 것을 예외 처리라고 할 수 있다.

 

  • 기본적으로 Java에서는 Try -> Throw -> Catch 의 구성으로 에러 처리(예외 처리)를 한다.
  • 이때 예외 처리는 에러가 발생하는 근원에 따라서 2가지로 구분할 수 있다.
  • 자바 프로그램 "외부"에서 발생하는 에러를 Checked Exception이라 한다.
  • 자바 프로그램 "내부 로직"에서 발생하는 에러를 Unchecked Exception이라고 한다.
  • Checked Excepton과 Unchecked Exception을 구분은 코드 내에서 명시적으로 예외 처리 동작을 필수로 해야되는지에 따라 나뉜다.
  • 결과적으로, 예외 처리란 예측하지 못한 상황에서 발생할 수 있는 에러를 미리 예상하여 처리 방법을 적어놓는 것이다.

1.  Checked Exception

  • Checked Exception의 경우 충분히 예상 가능한 에러로 반드시 명시적으로 예외처리를 해야하는 예외이다.
  • 컴파일 에러와 같이 예외처리를 하지 않는다면 컴파일이 불가능하고 코드에 빨간줄이 그어질 것이다.
  • 예외에 대해서 반드시 처리를 해야 컴파일이 가능한 (Need to be) Checked Exception이라고 생각할 수 있다.
  • 따라서, Checked Exception 에러가 발생한다면 반드시 try-catch 혹은 throw로 예외 처리를 해야한다.
  • 다양한 Checked Exception 중 자주 사용되는 것은 아래와 같다.
    1. FileNotFoundException : 존재하지 않을 수 있는 파일에 대해서 어떤 작업을 수행할 때 발생할 수 있는 상황
    2. IOException : 파일이나 문자와 같은 것들의 입출력에서 에러가 발생할 수 있는 상황
    3. SQLException : 데이터베이스와 관련된 작업 중 발생하는 에러로, 보통 데이터베이스에 접근하지 못하거나 잘못된 SQL문을 실행으로 에러가 발생할 수 있는 상황

 

2.  Unchecked Exception

Unchecked Exception은 Checked Exception의 반대로 생각하면 된다.

 

  • 자바 프로그램 내부 로직에서 발생할 수 있는 에러로 어떤 상황에서 발생할지 예측할 수 없는 예외처리이다.
  • 컴파일 에러와 다르게 명시적으로 예외처리를 하지 않아도 빨간줄이 생기지 않고 컴파일이 가능하다.
  • 예외에 대해서 반드시 처리를 하지 않아도 컴파일이 가능한 예외 처리라고 생각할 수 있다.
  • 개발자가 코드를 작성할 때 미리 예상하여 예외처리를 진행해야 하고, 이에 따라 프로그램의 완성도가 결정될 수 있다.
  • 어떤 상황에서 에러가 발생되었는지 확인하기 위해 로그를 꼭 표기하며, 추론과 디버깅을 통해 해결할 수 있다.
  • 다양한 Unchecked Exception 중 자주 사용되는 것은 아래와 같다.
    1. NullPointerException : 알수 없는 이유로 특정 값이 Null로 바뀌어 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생하는 예외
    2. ArithmeticException : 특정 값이  +/- 로 인해 0의 값으로 나누어질 수 있을 때 발생할 수 있는 예외
    3. ArrayIndexOutOfBoundsException : 배열의 길이에 포함되지 않는 값으로 배열에 접근하려 할 때 발생할 수 있는 예외

 

 

3. Checked Exception / Unchecked Exception 요약 정리

  Checked Exception Unchecked Exception
처리 여부 반드시 처리해야 함
(처리하지 않으면 컴파일 불가능)
명시적인 예외처리를 하지 않아도 됨
(처리하지 않아도 컴파일은 가능함)
확인 가능한 시점 컴파일 단계에서 빨간줄로 표시가 됨 런타임 단계에서 에러가 발생할 수 있음
종류 1. IOException
2.FileNotFoundException
3. SQLException
4. ParseException
1. NullPointerException
2.ArithmeticException
3. ArrayIndexOutOfBoundsException
4. SystemException
5. 추가적으로 개발자가 만들 수 있는 Custom Exception

 

 

 


 

 

위에서 말했다시피 Java 개발을 잘한다는 것"개발 로직을 작성할 때 예외처리를 잘하는 것"을 의미할 수 있다.
이때 예외 처리를 잘한다는 것"다양한 상황에서 발생할 수 있는 에러나 상황을 정확히 파악" 한다는 뜻이다.
마지막으로 예외 처리를 잘하기 위해서는
1.상황에 맞는 Exception을 파악하고 정의하고,
2.적합한 상황, 조건에서 Exception을 발생시키고,
3.발생한 Exception에 대한 적합한 처리(throws / try-catch)를 하는 것이다.