Spring, CS 공부 내용 3

김정용·2025년 1월 20일

기술면접 공부

목록 보기
3/15
post-thumbnail

Checked Exception, Unchecked Exception?

우리는 어플리케이션을 개발할때 여러 예외들을 정리해놓고 그에 맞는 예외처리를 준비하면서 예상치못한 서비스의 문제를 예방한다.

Exception에 대해 공부하다보면 Checked Exception, Unchecked Exception과 같은 내용이 나오는데 이 두가지는 대체 무엇이며 어떤 차이가 존재할까

확인 시점

두가지의 가장 큰 차이는 예외를 처리하는 시점에 따라 다르다.

😮 Checked Exception

우선 Checked Exception컴파일 시점에 확인된다.

반드시 처리해야하는 예외로, 입출력과 관련있는 IOException이나 SQLException이 여기에 해당된다.

해당 예외를 발생하는 메소드를 사용할때, 개발자는 throws를 사용하여 호출자에게 예외를 위임할 수 있고 다른 방법으로 try-catch문으로 메소드를 감싸서 처리할 수 있다.

😮 Unchecked Exception

그렇다면 Unchecked Exception은 어느 시점에 확인하면 될까?

Unchecked Exception은 컴파일 시점이 아닌 런타임 시점에 발생하는 예외를 말한다.

Checked Exception은 반드시 컴파일 시점에서 확인해야하는 반면 Unchecked Exception은 컴파일러에게 예외처리 의무가 존재하지 않는다.

예시로는 많이 만나볼 수 있는 RuntimeException과 해당 예외를 상속한 예외들이 여기에 해당된다.

🤔 이름은 왜?

그렇다면 왜 이름이 Checked와 Unchecked로 나누어질까?

설명에서도 말했듯 컴파일 단계에서 체크하는 오류냐 체크하지 않는 오류냐로 나뉜다.

Checked Exception은 컴파일 단계에서 확인하고, Unchecked Exception은 컴파일 단계에서는 예외를 확인하지 않고 아닌 런타임단계에서 확인하기 때문에 Unchecked이다.

사용법의 차이

Checked Exception은 보통 프로그램 내부에서 발생하는 반면 Unchecked Exception은 코드라인에서의 문제이거나 개발자의 단순한 휴먼에러로 발생한다.

정의의 경우 정답이 존재하지는 않지만 주로 파일의 입출력과 관련된 내용, 네트워크 통신을 하면서 발생하는 예외의 경우를 Checked Exception으로 처리한다.

큰 범위에서 보면 내 코드와 외부환경과의 상호작용시 발생하는 예외를 Checked Exception으로 처리한다고 생각하면 쉽다.

반대로 Unchecked Exception은 코드의 오류나, 개발자의 실수로 인해 발생하는 예외에 적합하다.

잘못된 인덱스 접근을 하는 경우가 여기에 해당한다.

Error vs Exception

에러와 예외의 차이를 혼동하는 사람들도 다수 존재한다.

두가지 모두 "프로그램에 문제를 발생하고 서비스를 멈추게 할 수 있어 대비해야한다" 라는 점은 동일하지만 차이가 분명히있다.

Error

Error는 주로 JVM 즉, Java Virtual Machine에서 발생한다. 시스템 레벨에서 직접적으로 발생하기 때문에 예외보다 꽤 심각한 문제로 생각할 수 있다.

프로그램에서 에러가 발생하게되면 회복이 어렵고 코드레벨에서 복구할 수 없는 경우도 존재한다.

Exception

Exception의 경우 굉장히 간단한 개발을 진행할때에도 빈번하게 마주할 수 있는 수준의 오류사항을 말한다.

에러와 다르게 발생시 코드를 바꿔가며 예외처리를 통해 대비할 수 있고, 회복 가능성이 존재한다.

👍 예외처리의 중요성

문제가 발생하지 않는 코드는 존재하지 않는다.

서비스를 사용하는 사용자가 내가 원하는 시나리오대로 서비스를 사용할거라는 보장도 없을뿐더러, 사용하는 라이브러리나 툴이 업그레이드를 하는 과정에서 지원을 멈추게되면 또 생각하지 못한 문제가 발생하게 된다.

예외처리를 통해 어느지점에서 문제가 발생했는지를 명확하게 하여 조금 더 빠른 코드 수정을 할 수 있고, 예외처리를 통해 사용자 경험이 더 나아지기도 한다.

but

하지만 향로님의 글에서도 나와있듯 (너무 잘 읽었습니다!) 예외처리를 너무 남발하다보면 좋지 않은 예외처리가 될 수 있다.

예외처리가 꼭 필요한 예외인지 확인하고, 예외처리를 할 경우 최대한 어느 지점에서 어느 문제가 발생했는지 알기 쉽게 의미있는 예외를 발생시켜야 한다.

참고

면접 질문 내용과 답변의 일부는 기술 면접 구독 서비스 - 매일메일 에 있다.
흥미로웠다면 구독해보는 것도 추천한다!

이미지 출처

profile
누군가의 롤모델이 될 때까지😇

0개의 댓글