안녕하세요 여러분!
김송아입니다.
혹시 제목에서 다른 글자를 하나 찾으셨나요?
자바 개발자라면, throw와 throws 한번쯤은 헷갈려볼만 하잖아요 🤣
사실 생김새 뿐 아니라 하는 역할 까지 헷갈려하는 분들이 참 많은 문법입니다.
'그냥.. 둘다 예외 처리인데.. 비슷한 거 아니야?' 라는 생각도 들죠.
이번 기회에 확실히 합니다.
throw와 throws는 완전 다른 역할입니다.
딱 한 문장으로 정리됩니다.
📌 throw는 예외를 발생시키는 역할입니다.
📌 throws는 예외 처리 책임을 전가하는 역할이다.
예시와 같이 보면 아주 찰떡콩떡으로 이해되겠죠? 예시랑 같이 이해해보죠.
[ throw : 강제로 예외 발생 시키기]
throw는 개발자가 강제로 예외를 발생시킬 때 사용합니다.
보통 예외는 개발자가 내는 게 아니라, 사용자가 예상하지 못한 값을 넣었을 때 발생하잖아요?
하지만 우린 throw를 이용해서 내가 원하는 곳에서 강제로 예외를 발생시킬 수 있습니다.🫢
throw 사용 방법은 간단합니다. 예외를 발생시키고 싶은 곳에서 아래와 같이 한 줄 쓰면 됩니다!
심지어 원하는 예외클래스를 발생시킬 수 있어요. 그럼 저 자리에서 예외가 터질거예요 뻥💥
throw new 원하는_예외클래스();
그럼 다음 예시로 같이 확인해봅시다.
main메소드에서 호출할 call()이라는 메소드를 만들고, 그 메소드 안에서 예외를 터트려보죠.
'어라.. 그랬더니 빨간줄이 뜨는데..?'
당연하죠! 예외를 터트렸으니, 예외 처리를 해야할 겁니다.
예외를 처리하는 방법은 위치에 따라 크게 두가지로 나눌 수 있습니다.
1️⃣ 예외가 발생한 곳에서 직접 처리하기
2️⃣ 예외가 발생할 그 메소드를 호출한 상위 지점에서 처리하기
위치만 다른 거예요. 예외 처리를 하는 문법은 try~catch 로 동일하게 진행합니다.
그럼, 하나씩 알아볼까요?
첫번째. '내가 알아서 처리할게' 예외가 발생한 곳에서 직접 처리하기
'후.. 그래.. 내가 발생시켰으니 내가 처리해야지'
예외가 발생한 call() 메소드 안에서 직접 예외를 처리합니다.
예외가 발생한 곳을 try~catch로 감싸서 처리합니다.
실행해보면, 다음 결과와 같이 호출 당한 메소드 안에서 ✔️예외 발생과 ✔️예외 처리 둘 다 해결했네요!
두번째. '날 부른 놈이 잘못 아니야?' 호출한 상위 지점에서 처리하기
호출당한 call() 메소드는 굉장히 억울합니다. 호출 안 당했으면 예외 안 터졌을 텐데..
그래서 예외를 날 호출한 놈에게 전달해버립니다.
예외가 발생한 메소드 선언부에 다음과 같이 선언해주면, 해당 메소드 안에서 예외가 발생하면, 해당 메소드를 호출한 지점으로 예외 처리 책임을 전가해버립니다.
throws 발생한_예외클래스명
그럼 다음 코드와 같이, try~catch 예외 처리를 main 메소드에서 해야하는 겁니다.
출력 결과를 같이 확인해보면, 다음과 같습니다!! 🫢
세번째. 아마 이런 질문을 하시는 분이 분명 있을거라고 생각해요!
두 군데서 다 예외 처리 구현해두면 어떻게 되나..?
아주 좋은 질문입니다. 우선순위가 있습니다.
호출 당한 메소드 안에서, 그리고 호출한 지점에서 둘다 예외 처리를 구현해봅니다.
다음 코드를 뚫어져라 쳐다보면, 힌트가 있습니다.
맞아요. throws Exception 코드가 비활성화 되어있습니다. 자세히 보면 throws Exception이 까만색이에요!
우선 순위는 호출 당한 메소드에서 직접 처리하는 것입니다.
예외가 발생하자마자 그 자리에서 잡혀버렸거든요!
자, 어떤가요? 이제 throw와 throws 개념 헷갈리지 않겠죠?
그러니 이제 그냥 되는대로, 빨간 줄만 피해서.. 막 쓰지 말고🔥
여러분의 선택으로 구현하는 예외 처리를 해보자구요!!!
그럼 다음 시간에도 예외 처리 시리즈를 이어 나가봐야겠죠?
어떤 주제가 기다리고 있을지, 다음 아티클에서 뵙겠습니다.
오늘도 긴 글 완독하시느라, 너무너무 고생 많으셨습니다.
날이 많이 춥다니까 꽁꽁 잘 싸매서 다니시길 바라며⛄️
감사합니다.
김송아 드림
'Programming' 카테고리의 다른 글
개발자 포트폴리오 작성 방법 2탄 무료 라이브🚀 (3) | 2024.12.17 |
---|---|
좋은 예외 처리 (feat. 이동욱이라 쓰고 갓동욱이라 읽다) (30) | 2024.12.06 |
추천 알고리즘, 초개인화 서비스 시대가 가져온 숙제 (53) | 2024.11.29 |
예외와 에러의 차이, 분명히 설명할 수 있나요? (53) | 2024.11.26 |
2024년 D-39, 백엔드 개발자가 되기 위해 한 달 동안 뭘 하면 좋을까요? (48) | 2024.11.22 |