상태패턴을 이용해서 체스게임을 구현했는데, 해당 피드백을 받았다. 지금까지 미션을 하면서 무지성으로 IllegalArgumentException
을 던졌었는데, 이번 기회에 공부를 해봤다.
숙련된 프로그래머는 그렇지 못한 프로그래머보다 더 많은 코드를 재사용한다. 예외도 마찬가지로 재사용하는 것이 좋다.
대표적으로 재사용되는 예외는 아래와 같다.
예외 | 주요쓰임 |
---|---|
IllegalArgumentException | 허용하지 않는 값이 인수로 건네졌을 때 |
IllegalStatementException | 객체가 메서드를 수행하기에 적절하지 않은 상태일 때 |
NullPointerException | null을 허용하지 않는 메서드에 null을 건넸을 때 |
IndexOutOfBoundsException | 인덱스가 범위를 넘어섰을 때 |
ConcurrentModificationException | 허용하지 않는 동시 수정이 발견됐을 때 |
UnsupportedOperationException | 호출한 메서드를 지원하지 않을 때 |
왠만한 상황에서는 표준예외가 정의되어있느니 재사용하는 것을 추천한다.
Exception
, RuntimeException
, Throwable
,Error
는 직접 재사용하지말고, 추상 클래스라고 생각하길 바란다.
public class End implements State {
@Override
public State start() {
throw new IllegalStateException("[ERROR] 게임이 이미 종료되었습니다.");
}
End 상태일 경우 start를 호출하지 못하는 이유는 허용되지 않는 값이 인수로 건네져서가 아니라 객체가 메서드를 수행하기에 적절하지 않은 상태이기 때문에 IllegalStateException
을 쓰는 것이 적절하다.