요즘 내 코드가 클린하지 못하다는 생각이 들어 작년 우아한 테크코스 문제를 풀어보고 있다.
2주 차 로또 문제의 필수 기능을 구현한 후 테스트 코드를 돌렸는데
해당 테스트 코드가 돌아가지 않았다.
ERROR_MESSAGE는 "[ERROR]"이고, 예외를 던졌을 때 "[ERROR]"를 포함하고 있으면 되는 테스트 코드였다.
하지만 나는 로또 문제를 풀면서 생성되는 모든 에러에 [ERROR]를 붙여놨기 때문에 무엇이 원인인지 파악하기 힘들었다..
그리고 30분 정도 구글링을 해서 문제점을 찾은 결과,
테스트 코드에서 내가 던진 예외를 못 받고 있었다. 즉, new로 생성된 에러를 잡아줄 catch문이 없었다..
위처럼 에러를 생성해서 던지고 있는데 이 에러를 받아줄 catch 구문이 없었다...
때문에 여기서 만들어진 에러는 자신을 받아줄 곳을 찾다가 영원히 밖으로 튕겨나가고 있던 것이다..ㅋ
원인을 파악한 뒤 바로 try-catch 구문을 만들어 에러를 잡아주도록 했다.
inputView를 따로 구현해놨기 때문에 그쪽에서 에러를 잡을까 했지만
입력할 때 외에도 로또가 생성될 때 등 다른 곳에서도 예외가 던져지기 때문에 우선은 메인에서 잡아주었다.
+) 지금은 main문의 책임 분리를 위해 LottoSystem 클래스에 try-catch문을 작성해두었다.
메인에서 예외를 잡아주니까 바로 테스트를 통과했다.
항상 예외를 열심히 처리해 주겠다고 무작정 생성하기만 했는데 이번 기회에 catch 구문의 중요성을 느낄 수 있었다.
그리고 구글링 하면서 알게 된 것이 있는데 스프링에서는 exceptionhandler로 예외를 처리해 주기 때문에 이런 상황이 잘 발생하지 않는다고 한다.. 객체지향 설계에 대해 공부하고 싶어서 우테코를 먼저 풀어보고 있는데 이러한 설계를 더 쉽게 도와주는 스프링을 빨리 공부하고 싶다.
'Dev > Java' 카테고리의 다른 글
[Java] isPresent() vs. ifPresent() (0) | 2023.09.01 |
---|---|
[Java] pickNumberInRange ArrayIndexOutOfBoundsException (0) | 2023.08.23 |
[Java] IllegalArgumentException vs. IllegalStateException (0) | 2023.08.18 |
[Java] IntelliJ 프로젝트 빌드 안 될 때 (Link Gradle Project) (1) | 2023.08.09 |
[Java] 일급 컬렉션(First Class Collection)이란? (0) | 2023.08.01 |