0. 이 글을 쓰는 이유
java를 완전 처음 접하면 try catch와 throw에 대해 생각이 좀 많아질 수 있는데 최대한 간단하게 설명을 하고 내 생각을 정리하기 위함
1. throw?
이름 그대로 생각하면 던진다는 뜻이다.
java에서는 에러를 "다른 메서드에게 던진다" 정도로 생각하면 될 것 같다.
2. try - catch (- finally)
이름 그대로 생각하자.
시도하고 잡고 마침내 뭔가를 한다.
try 블록에서 시도하다가 문제가 발생한 경우 catch문에서 후속조치를 할 수 있다.
이후 옵션 사항으로 finally문을 통해 try가 다 끝나던 catch로 후속조치를 하던 아무튼 무조건 실행해야 하는 로직은 finally 블록에서 진행한다.
3. 본론
3-1. throw는 책임전가?
try-catch 처럼 내가 직접 처리하는 게 아니라 누군가에게 처리하라고 책임을 떠민다.(고상한 현대식 표현으로 우리는 이걸 위임이라고 부르기로 사회적 약속을 했다.)
이렇게 책임을 떠밀었을때 어떤 이점과 단점이 있는지 잠시 고민을 해보자.
이점은 내가 책임을 지지 않는 것이다. 아무튼 이 메서드를 호출하는 다른 메서드에게 떠넘겨서 문제 발생에 대한 후속 조치를 맡길 수 있다. 물론 이 과정에서 어떤 에러인지는 명확하게 명시를 해주는 게 좋다.(라고 작성하고 규칙이자 예의라고 표현하자.)
그렇다면 단점은 무엇이 있을까.
이점의 결과물이 단점일 수 있다. 해당 기능을 가져다 쓰는 사람은 이제 해당 에러에 대한 후속 조치를 할 의무를 가지게 된다.
4. 방금 뱉은 말들에 대한 수습
실은 저렇게 적었지만 try-catch와 throw는 잘 섞어서 사용하면 좋은 기능이다.
throw를 잘 사용하면 유사한 로직, 기능에 대해 한 곳에서 후속 처리를 할 수 있게 나이스한 구조를 만들 수 있다.
다만 우스갯소리를 한마디 하자만 일반적인 java application기준 throw만 하다가 아무도 error handling을 하지 않는 경우 application이 죽게 된다.(spring의 경우 별도의 에러 핸들링 메커니즘이 있어서 죽지는 않고 보통 컨트롤러를 통해 서비스 로직을 태우다가 나는 경우 internal server error - 500 code와 함께 일부 내용을 반환해 준다.)
5.(급하게) 마무리
실은 throw, try-catch의 경우 잘 사용하면 좋긴 하다.
'JAVA > java - core' 카테고리의 다른 글
jvm 조금씩 알아가기 4편 - 실행 엔진(Execution Engine) (0) | 2023.02.22 |
---|---|
jvm 조금씩 알아가기 3편 - 데이터 영역(Runtime Data Areas) (0) | 2023.02.19 |
jvm 조금씩 알아가기 2편 - 클래스 로더(class loader) (0) | 2023.02.18 |
jvm 조금씩 알아가기 1편 - jvm이란 (0) | 2023.02.17 |