Programming

예외와 에러의 차이, 분명히 설명할 수 있나요?

송코딩 songcoding 2024. 11. 26. 09:47

안녕하세요 여러분,

김송아입니다.

 

 

 

지난 🚀포트폴리오 작성 방법 웨비나🚀를 정말 재밌게 끝내고! (후기는 따로 남겨야쥐🐭)

다음 아티클은 꼭 이걸로 써야겠다 마음 먹은 주제가 있습니다.

 

 

오늘부터 같이 얘기해볼 주제는 

바로, 예외 처리입니다 ⚡️

 

ㅋㅋㅋㅋ이렇게 땀까지 흘릴 일은 아니지만 @침착맨 최고

 

 

예외 처리는 사실,

제가 개인적으로 좋아하는 프로젝트 완성도의 기준이기도 합니다.

 

예외 처리를 잘 했다는 건 곧 사용자의 시선에서 구현했다고 들리더라구요.

자소서나 면접에서 '사용자의 경험을 중시하는 개발자'라고 소개하시는 분이라면,

다시 한번 내 코드를 뒤돌아보고 예외 처리를 신경썼는지 봐주시면 너무 좋을 것 같아요.

 

 

예외 처리를 제대로 알기 위해선, 예외와 에러의 차이부터 확실히 해야합니다.

예외와 에러의 차이도 모른 채 그저 문법적으로만 다가가려 한다면, 진짜 필요성을 놓치겠죠?

 


 

예외와 에러 차이
웨비나에서도 말씀드린 내용이기도 하니, 함께 하셨던 분들은 다시 돌아보는 차원에서 봐주세요!
참석하지 못하셨다면 이번 글로 생각을 깨워보자구요!

 

 

에러와 예외의 차이는 기본 중에서도 정말 중요한 기본 아닐까 싶어요.

만약 여러분이 면접에서 이런 질문을 받았다면 어떻게 대답하실 것 같나요?

 

🤔 지원자님, 에러와 예외의 차이를 각각 설명해주세요.

 

찾아보지 말고! 지금 잠시 스크롤를 멈추고 30초만 생각해주세요.

가능한 분들은 메모장을 켜서 잠깐 적어보셔도 너무 좋을 듯 합니다.

내 생각을 뱉어낼 때 진짜 내 것이 된다고 하죠.

 

 

그럼 같이 비교해볼까요?

우선 에러와 예외의 차이는 극명한 한 끗이 있습니다. 바로 개발자가 해결할 수 있냐 없냐의 차이에요.

 

 

🚀 에러

프로그램 코드의 잘못이 아니라 시스템 단의 문제입니다.
프로그램 코드로는 해결할 수 없어요. 

 

프로그램엔 치명적인 문제이기도 합니다. 

일반적으로 에러는 JVM에서 발생하는 경우가 많습니다. JVM에서 스택오버플로우(StackOveflowError)나 메모리 부족(OutMemoryError)와 같은 에러가 발생하면 코드 잘못이 아니라 진짜 문제 원인을 찾아 해결해야겠죠?

또한 불가항력적인 자연 재해로 일어난 서버 다운도 일종의 에러입니다. 

즉, 사용자가 프로그램을 아예 사용하지 못할 정도의 심각한 문제를 우리는 보통 에러라고 부릅니다.

 

 

🚀 예외

프로그램 코드의 문제입니다.
코드로 해결할 수 있는 문제입니다.

 

에러에 비하면 문제의 수준은 굉장히 약합니다. 그래서 에러라는 단어가 아니라 예외라고 표현하고 있습니다.

많은 분들이 예외는 꼭 실행 중에만 발견되는 것이라 오해하고 계시더라구요.

하지만 예외는 반드시 실행 중에만 발견되는 것은 아닙니다. 같이 확인해볼까요?

 

실행 전이나 실행 중이냐에 따라 예외는 크게 두가지로 분류합니다.

 

한가지. checked exception

"컴파일러가 체크할 수 있는 예외"

즉, 실행 하기 전에 컴파일러에 의해 발견되는 예외입니다. 실행하기 위해서는 반드시 예외를 처리해야다는 겁니다.

예를 들어 IOException이 있습니다.

 

두가지. unchecked exception

"반대로 컴파일러가 체크할 수 없는 예외"

예외 처리를 하지 않고도 프로그램을 실행할 수 있습니다.

대부분 실행 중 사용자의 예상치 못한 입력값이나, 제대로 막지 않아서 객체에 null값이 들어갔을 때 으로 벌어지는 일들입니다.

예를 들어 NullPointerException, ArrayIndexOutBoundsException 등이 있습니다.

 

 

자 그럼, 이제는 간단하지만 확실히 비교할 수 있겠죠?

에러 예외
심각한 문제
개발자가 코드로 처리할 수 없는 문제
비교적 가벼운 문제
개발자가 코드로 처리할 수 있는 문제

 

 


 

그럼 다들 어리둥절할 거예요.

그럼 예외가 아니라 에러만 열심히 처리하면 되는 것 아니냐구요.

하지만 예외를 신경써야 하는 이유를, 저는 두가지로 말씀드립니다. 

 

첫번째. 발생하는 빈도의 차이는 분명합니다. 

에러 발생과 현실 세계에서는 비행기와 차 사고의 빈도 차이 수준이에요!

 

비행기 사고가 날 확률 vs 차 사고가 날 확률

무엇이 더 잦게 일어나나요?

 

두번째. 그렇다면, 우리 일상 생활에 불편함을 주는 것은 어떤 쪽인가요?

그렇다고 에러를 간과하자는 뜻이 절대 아닙니다. 에러가 터졌다는 건 그냥 프로그램이 죽었다는 소리니까요...😇

에러도 잘 대비하고 최대한 일어나지 않도록, 모두가 노력해야겠죠!

 

하지만 우리가 자주 일어나는 예외는, 일상 생활에 소소하지만 번거로운 문제를 일으키기 때문에 더 불편하게 느껴지곤 합니다. 

그렇기 때문에 많은 분들이 간과하고 있는 예외를 아주 탄탄히 처리하면, 그만큼 안정성 있는 프로그램이 또 있겠냐는 거죠!

 

 

 

이젠 느낌이 조금 오시나요?

왜그렇게 예외 예외 예외! 다들 외치고 있는지.. 왜 예외 처리를 잘해야하는지..🫢

 

‼️ 불편함은 단순히 불편함에서 그치는 것이 아니라, 불편함이 반복되었을 때 문제가 됩니다.
사용자를 지치게 만들고, 실망하게 만들면 사용자는 결국 이탈하게 될 테니까요.
저는 이런 상황을 세상에서 제일 치명적인 상황이라고 부릅니다.

 


 

오늘은 이렇게 예외와 에러의 차이에 대해 알아보며, 왜 우리가 예외를 그렇게 신경써야 하는지 가볍게 생각해봤습니다.

에러와 예외의 차이를 비교할 수 있는 사람이 되셨다면, 오늘은 충분합니다!

이렇게 면접 합격에 또 한걸음 나가는 거니까요 👏🏻👏🏻👏🏻

 

기왕 예외 얘기를 시작한 김에, 쭉쭉 가봅니다!

다음 아티클에서는 throw와 throws에 대해 예제를 통해 예외 처리를 알아보도록 할게요.

 

...

 

이번주에 눈도 오고, 날씨도 아주 추워진다고 하죠☃️☃️☃️

지금도 바람이 쌩쌩 불고 아주 난리입니다..

 

이런 날씨엔 나만 움추러드는 게 아니라, 동물이라면 다들 움추러들 시기이죠?

그러니 혹시 게을러졌다고, 늦잠을 잔다고 스스로 혼내지 마시고

'아 다같이 이러는 중이지?' 라고 좀 더 편안히 바라봐주세요 (물론 저에게 하는 말입니다ㅋㅋㅋㅋ)

 

오늘도 따뜻한 하루 보내시구요!

또 만나요💓