예외는 왜 처리해야 하는걸까?
오늘 예외처리에 관련된 수업을 들었는데 이전에 개발하면서도 try/catch는 많이 써왔지만, 뭔가 관례적으로, 그냥 수동적으로 막 작성한 부분이있어서 이걸 왜 어떤 코드에 작성을해야하는지 명확하지 않았던 경험이있던 만큼
예외처리가 무엇인지보단, 왜 사용해야하는지에 대해 조금더 깊게 생각을 해보았습니다.
1. 우리가 의도한 동작이 아닐때를 대비하기위해
저는 첫번째 가장 기본적이고 심플한 이유가 이것이라고 생각합니다.
흔히 버그가 일어날때를 대비해서라고 말하는데 진짜 말 그대로 우리가 의도한 동작은 A인데 사용자가 어떤식으로 갑자기 B처럼 사용을 한다면 우리가 의도한 동작이 아니게될 것 입니다. 이를 방지하기 위해서 예외처리를 하는 것입니다.
try {
// 1. 위험한 행동 시도
String member = iveMembers.get(10);
} catch (IndexOutOfBoundsException e) {
// 2. 예외가 발생하면 실행되는 구조 로직
System.out.println("🚨 그런 멤버는 없습니다!");
}
2. 수동적이 아닌 능동적인 프로그램을만들기 위해서
이건 무슨 의미냐면 이런 질문을 가져봅시다. "우리가 의도한 동작이 아니면, 그게 아닐때 그냥 -1 , false 같은 것들을 반환하면 되는거 아님?" 이라는 질문은 가져본다면, 저 1번의 논리만으론,,,음...그렇지 사실 그렇게 해도 돌아가긴 잘 돌아가지.
"해당 코드를 내가 의도한 대로 사용했다면" 저는 이게 가장 중요하고 또 중요하다고 생각이 들었습니다.
public boolean buyTicket(int money) {
if (money < 10000) {
return false;
}
// ... 예매 로직 ...
}
이런 코드가 있다고 생각해봅시다.
음, 내가 들고있는 금액을 받고, 금액이 만원보다 아래면 예매를 실패 시켜야겠다! 그러니까 false반환!
겉으로 보기에 너무나 잘 작성한 코드같습니다. 이 코드를 그대로 한달이란 시간이 지났습니다.
그리고 개발자 B가 새로운 서비스를 만들다가 티겟구매 메서드가 이미있네? 이거 가져다 써야지~ 하고 재사용을 합니다.
...
buyTicket(4000)
// 예매 성공~!!!
...
이런식으로 코드를 작성했고 이 개발자 B는 너무 게으른 개발자였기때문에 아~ 안에서 예외 처리 되어있겠지~ 하고 내부 로직을 확인하지 않습니다. 반환 타입조차도.
그리고 서비스가 배포되었습니다.
그럼이제 커뮤니티에서 "야 돈없을때 예매해도 티켓나온다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㄱㅇㄷ" 을 외치며 무한 티켓 복사에 되팔이에 난리가 납니다.
여기서 우리는 1번에서 말한 사용자가 고객뿐만 아니라 내가 아닌 다른 직장 동료 또 다른 개발자가 될 수있다는것을 알아야 합니다.
public void buyTicket(int money) {
if (money < 10000) {
throw new RuntimeException("응~ 돈없어~ 나가~");
}
// ... 예매 로직 ...
}
이런식으로 코드를 수정한다면 개발자 B가 사용하던 C,D, 알파 오메가 델타 브라보 찰리 누가 사용해도 상관이 없습니다.
개발자가 수동적으로 하나하나 체크하는게 아닌 메서드 자체가 능동적으로 오류를 잡아내고 흐름을 제어할 수 있는것입니다.
그리고 이건 웃길짤이 보이길래 가져와봤습니다ㅋㅋㅋㅋㅋㅋㅋㅋ
우리 모두 이런 예외처리가 아닌 try/catch / Multi-catch 같은 기능을 사용해서 깔끔하게 코딩합시다...

'TIL' 카테고리의 다른 글
| HTTP (http vs tcp/ip) (1) | 2026.01.30 |
|---|---|
| 결제실패 시 재고 원상복구 시스템 만들어보기 (1) | 2026.01.23 |
| 의존성 주입 해보기 (DI) (0) | 2026.01.15 |
| Java의 record 클래스 타입으로 상세기록 만들기 (0) | 2026.01.14 |
| 삭제한데이터를 undo 하는 기능 만들기 (0) | 2026.01.14 |