[Spring] IllegalStateException VS IllegalArgumentException

6720·2023년 5월 18일
0

이거 모르겠어요

목록 보기
19/38
post-custom-banner

스프링 강의 듣는 중 다음과 같은 에러로 충돌이 났음.

org.opentest4j.AssertionFailedError: Unexpected exception type thrown
==> expected: <java.lang.IllegalStateException>
but was: <java.lang.IllegalArgumentException>

해당 코드는 이름 중복을 검사하여 IllegalStateException을 띄우는 테스트임.

이 에러의 경우는 Service의 중복 검사 메소드에서 IllegalStateException가 아닌 IllegalArgumentException을 발생하도록 해서 assertThrows가 제대로 일을 못하기 때문에 났기 때문에 Service의 Exception을 고쳐 해결하긴 했음.

<<이름도 비슷하게 생긴게 뭐가 다를까 갑자기 궁금해져서 쓰는 포스팅>>

IllegalArgumentException

Thrown to indicate that a method has been passed an illegal or inappropriate argument.
- 메소드가 잘못된 인수 또는 부적절한 인수를 전달했음을 나타내기 위해 발생함.

호출자가 인수로 부적절한 값을 넘길 때 던지는 예외
매개변수로 양수를 보내야 하는데 음수를 보낸다거나, 10글자의 문자열을 보내야 하는데 5글자를 보낸다는 등의 상황에서 발생하는 예외

대신 null이 들어간다면 NullPointerException을,
시퀀스의 허용 범위를 넘는 값이 들어간다면 IndexOutOfBoundsException을 발생시키는 등,
다 같은 RuntimeException이지만 IllegalArgumentException의 우선순위는 낮은 듯 함.

IllegalStateException

Signals that a method has been invoked at an illegal or inappropriate time.
- 메소드가 잘못되었거나 부적절한 시간에 호출되었음을 나타냅니다.

In other words, the Java environment or Java application
is not in an appropriate state for the requested operation.
- 즉, Java 환경 또는 Java 응용 프로그램이 요청된 작업에 적합한 상태가 아닙니다.

공식 문서의 내용만으로는 이해하기 어려워서 찾아본 결과 해당 예외가 발생한 스트링부트 예시를 발견함.

1) 해당 링크
“/”의 경로를 가진 메소드가 2개 있었다는 이유로 발생한 예외였음.

2) 해당 링크
컨트롤러의 @RequestMapping의 값이 중복되어 나타나는 예외였음.

⇒ IllegalstateException은 중복이 있다면 발생하는 예외?

대상 객체의 상태가 호출된 메소드를 수행하기에 적합하지 않을 때 던지는 예외
초기화되지 않은 객체를 사용하려 할 때, 반환해야하는 결과 값이 없을 때 발생하기도 하지만,
검사 중에 중복 데이터로 인해 발생할 수도 있음.

참고

https://velog.io/@injoon2019/IllegalArgumentException-vs-IllegalStateException
https://jaehun2841.github.io/2019/03/10/effective-java-item72/#서론

profile
뭐라도 하자
post-custom-banner

0개의 댓글