🍉 개요
자바에서는 예외 처리를 다루는 두 가지 주요한 방식이 있다. 그것은 바로
CheckedException
과 UncheckedException
이다. 이 예외처리들의 특징과 차이점을 간단히 비교해보고 실무와 협업에서는 어떤 방향이 용이한지 한 번 예를 들어가며 설명해보겠다. 🍋 CheckedException [체크 예외]
CE
는 컴파일 시점에 확인되는 예외이다. 즉, 이러한 예외는 컴파일 과정에서 처리 되어야 하며, 그렇지 않을 경우 컴파일 오류가 발생한다. IntelliJ같은 경우에는 이런 체크 예외가 표시가 되므로 컴파일 하기 전에 어느 부분이 예외가 발생하는 지 파악할 수 있게 해주고, 그로 인해 예외 처리를 하지 않으면 프로그램이 실행이 되지 않는다. 따라서 예외 처리를 강제하는 특성을 가지고 있다. 이 강제성은 예외 처리가 필요한 부분을 명확하게 하기 떄문에, 협업의 과정에서 안전성과 대응 능력을 향상 시킨다고 볼 수 있다. 하지만 명시적 처리 방법 때문에 가독성이 떨어질 수 있다는 단점이 있다. - 예외 처리의 강제성을 부여
- 프로그램 안전성 향상
- 협업에서 커뮤니케이션 오류가 적음
- 가독성이 조금 떨어질 수 있음
자주 발생하는 Checked 예외들
🍎 UncheckedException [비체크 예외]
UE
는 프로그램 실행 과정에서 발생하는 예외로, Runtime Exception
이라고 부른다. 컴파일 할 당시에는 오류가 발생하지 않기 떄문에 프로그램을 실행하기 전에는 문제가 없다. 다른 말로 표현하면 예외 처리의 강제성이 없으며, 이 부분을 작업을 수행하는 사람에게 예외 처리의 방법을 맡기는 자율성이 있다고 보면 된다. 이는 프로그램의 유연한 에러 처리를 가능하게 하며, 가독성을 높이며 예외 처리 코드의 과다 사용을 방지한다. 하지만, 예상치 못한 런타임 오류가 발생할 확률이 높으며, 이는 비정상적인 프로그램 종료를 야기할 수 있다. 실제 업무에서 이런한 경우에는 비용적 손해를 안길 가능성이 높다고도 볼 수 있다. 협업에서도 작성자의 코드에서 발생할 수 있는 예외를 파악할 수 있어야되며, 인수 인계의 업무량이 높을 수도 있다.- 예외 처리의 자율성이 높음
- 불필요한 처리를 하지 않음으로서 가독성이 상대적으로 높을 수 있음.
- 협업에서 이전 작성자의 예외 상황을 파악할 수 있어야 함
- 프로그램 안전성은 상대적으로 떨어짐
자주 발생하는 Unchecked 예외들
🍓 예외 처리 문법
예외 처리 방법으로는 대표적으로 2가지 있고, try - catch 구문에서 더 세밀하게 나누어 진다.
- Try - Catch
- Try - Catch - Finally
- Try - With - Resources
- Throws
🍊 Try - Catch 구문
Try-Catch 구문의 예외 처리의 핵심적인 구문이다. 이 구문을 사용하여서 프로그램 실행 중 발생할 수 있는 예외 상황을 처리할 수 있다.
Try-Catch 구문 예시
Try
블록
try 안에는 예외가 발생 할 수 있는 가능성이 있는 코드를 블록안에 위치 시킨다. 정상일 경우에는 catch는 실행되지 않는다.
Catch
블록
catch 블록은 try블록에서 발생한 특정 유형의 예외를 처리하는 데 사용된다. 예외가 발생할 경우에는 try 구문 안의 예외 발생 이후라인은 실행되지 않는다.
Try - Catch - Finally 예시
Finally
블록
Try구문이 실행되든 Catch부분이 실행되든, Finally 구문은 반드시 실행된다. Finally 구문에서 Try, Catch 구문에서 사용하고 닫히지 않은 소스가 있다면 이 구문에서 정리를 해줘야 한다.
Try - With - Resources 예시
- Try ( ) 구문
Try 구문 옆에 소괄호와 함께 리소스가 사용되고 있다면, 이는 Try-With-Resource구문으로 Try 또는 Catch 어떤 구문이 실행되든 간에 구문이 종료가 되면 사용되고 있던 리소스도 같이 자동으로 종료한다. 보통 해당 기능을 fianlly에서 구현해야 했으나 자바 8 이후의 새 기능으로 해결 가능하다.
🍈 Throws 구문
Throws는 메소드가 실행 중에 발생할 수 있는 특정한 예외를 호출자에게 그 책임을 전가하는 방식이다. Throws는 실제 협업에 있어서 많이 사용되는 방식으로 자바의 객체지향개념에도 적합한 작업 방식을 제공하여 캡슐화와 확장성에도 잘 어울리는 문법이다.
Throws 구문 예시
- 빨간칸은 기존 작업자 구간이고 노랑곳은 추후에 같이 작업하게되는 협업자 파트라 해보자.
- 기존 작업자 파트 (빨간칸)
- 예외가 발생할 가능성이 있는 곳에는 throws를 통해서 예외 처리와 문구를 지정해 놓고 호출자가 처리할 수 있도록 작업을 해 놓았다.
- 그리고
throws Exception
으로 이 외에 발생할 수 있는 예외를 호출자에게 넘겨서 처리할 수 있게 해 놓았다.
- 협업자 파트 (노랑칸)
- 아이디 부분에서 이미 기존 작업자가 예외 처리를 해 놓았지만, 해당 예외를 인수인계 받지 못하거나 못 보는 경우가 있을 수도 있다. 이런 경우에 throws는 현재 협업자가 반드시 처리할 수 있도록 강제하므로 오류의 가능성이 줄어든다.
- 예외가 발생했을 때, 협업자는 발생하는 예외의 내용을 부모 Exception의 메소드인 getMessage를 통해서 어떠한 예외가 발생했는지 내용을 파악 할 수 있다.
- Throws의 가장 큰 장점
해당 예시에는 두 부분만 나와있기에 효율성에 대해서 의심해 볼 수 있겠지만, 만약 예외를 처리해야되는 것이 천 개 ~ 만 개가 된다면, 모든 것을 발견하고 각각 처리를 하는게 비효율적이다. 그런 경우에 throws로 넘겨서 호출하는 곳에서 일괄적으로 처리할 수 있게 한다면, 더 많은 시간을 아낄 수 있을것이다. 그리고 인수인계 받는 작업자가 해당 내용의 모든 작업을 몰라도 작업을 할 수 가 있으므로 효율성이 극대화 될 것이다.
Share article