#JAVA
예외 처리가 생겨나게 된 이유
현대의 서비스들은 외부 서버와의 연결, 네트워크 통신 등 많은 부분들을 서로 연계하여 만들어진다.
그로인해 발생되는 많은 예외들을 어떻게 처리해야 할 것인가는 매우 중요하다.
예외 처리 기법이 생겨나기 전의 처리
- 반환 값으로 예외 처리
오류가 발생했을 때 직접 값을 반환해 처리하는 방식 ex) "success", "false" - =>
- 해당 방식은 수많은 수많은 if문들의 중첩으로 정상 흐름과 예외흐름이 겹쳐 있어, 중요한 정상 흐름을 알아보기가 쉽지 않다.
예외 계층
자바는 예외를 처리하기 위한 매커니즘을 제공한다.
- keyword : try, catch, finally, throw, throws체크 예외와 언체크 예외의 분기
예외는 폭탄과 같고 잡아서 처리하거나 계속 던져버려야 한다.
체크 예외 (Exception)
잡아서 처리하는 경우 ( throw - 생략 X )
장점- 개발자가 누락하지 않고 어디서 예외가 발생하는지 파악하기 쉬움 - 컴파일러가 누락된 부분을 잡아줄 수 있음단점
- 모든 예외를 반드시 처리해야 하기 때문에 너무 번거로워 진다.
언체크 예외 (RuntimeException)
던져서 처리하는 경우 ( throws - 생략 O )
상위로 계속 폭탄을 던져냄
장점- 신경쓰고 싶지 않은 예외는 무시가능단점
- 실수로 예외를 누락할 확률이 있다.
예외의 계층화

예외를 단순히 코드를 분리해 처리하는 것이 아닌, 계층화 하여 더 세밀하게 예외를 분류하고 처리할 수 있다.
바람직한 예외 처리와 실무
- 정상 흐름과 예외 흐름을 나눈다.
- 반드시 실행되어야하는 로직 수행 가능
- 리소스 반납
모든 예외를 체크로 처리할 경우 예외 처리 지옥에 빠질 가능성이 농후하다.

또한, 예외를 잡아서 복구할 수 있는 예외보다 복구할 수 없는 예외가 더 많다.
=> 매우 중요한 쪽은 체크 예외로 처리하고, 대부분은 언체크 예외로 둔다.

예외를 공통으로 처리하는 것이 바람직한 방향
=> 세부 로직에선 언체크로 수행하고, 서비스 메인단에서 오류를 받아서 처리한다.
ex) main 메서드에서 ExceptionHandler를 이용하여 오류를 한꺼번에 받고, 필요한 오류들만 별도로 처리하는 방식
try-with-resources
AutoCloseable ( Interface )를 구현하면 try 가 끝나는 시점에 close()를 자동으로 실행한다.
public interface AutoCloseable {
void close() throws Exception;
}구문
try (Resource resource = new Resource()) {
// 리소스를 사용하는 코드
}- finally 보다도 더 빨리 실행
출처 : 인프런 '김영한의 실전 자바 - 중급 1편'
'Backend > JAVA' 카테고리의 다른 글
| [JAVA] ArrayList (0) | 2025.01.26 |
|---|---|
| [JAVA] 제네릭 (1) | 2025.01.25 |
| [JAVA] 클래스 (중첩, 내부) (1) | 2025.01.22 |
| [JAVA] 열거형 (Enum Type) (1) | 2025.01.22 |
| [JAVA] 불변 객체 (0) | 2025.01.19 |