유용한 표준 Java RuntimeException
( 이미지 출처 : https://openjdk.java.net )
Java 프로그래밍을 하면서 예외처리를 발생시켜야하는 경우, 우리는 RuntimeException을 상속하는 예외를 사용하면 됩니다.
그리고 RuntimeException을 상속하는 예외를 새롭게 만드는 것보다는 JDK에서 제공하는 표준 RuntimeExcepton 상속 예외들을 사용하는 것이 바람직합니다.
JDK 12 기준으로 RuntimeException을 직접 상속하는 예외는 총 58개입니다. (참고 - OpenJdk 12 RuntimeException)
그리고 그 58개의 예외들을 다시 상속하는 자식 예외들까지 개수를 세면 엄청나게 많습니다.
그 중 자주 사용하게 되는 유용한 표준 RuntimeException 들을 기록합니다.
참고로 전체 계층 구조를 보고 싶으시다면 Intellij의 Hierarchy 기능을 이용하시면 쉽게 확인 가능합니다.
예를들어 RuntimeException의 전체 계층 구조를 보고 싶다면 아래와 따라하시면 됩니다.
shift
연속 두번 누른 후RuntimeException
입력 후 선택 : RuntimeException class가 열림Ctrl
+H
IllegalArgumentException
IllegalArgumentException 은 잘못된 인수를 가진 호출을 받았을 때 사용하면 됩니다.
IllegalArgumentException를 다시 상속하는 예외들도 많이 있습니다. 아래 예시는 그 중 몇가지 자주 사용되는 예외들입니다.
다양한 부적절한 인슈 유형들에 대해서 좀 더 구체적인 예외를 발생시킬 수 있게 해줍니다.
- IllegalFormatException - available in 1.5 or later
- InvalidKeyException - 1.5
- InvalidParameterException - 1.1
- InvalidPathException - 1.7
- KeyAlreadyExistsException - 1.5
- NumberFormatException - 1.0
- ProviderMismatchException - 1.7
IllegalStateException
IllegalStateException 은 호출받은 객체가 요청을 수행하기에 적합하지 않은 상태일때 사용하면 됩니다.
- AcceptPendingException - 1.7
- AlreadyBoundException - 1.7
- CancellationException - 1.5
- CancelledKeyException - 1.4
- ReadPendingException - 1.7
- WritePendingException - 1.7
NullPointerException
NullPointerException 은 null을 허용하지 않는 메소드에 null이 인자로 넘어왔을 때 사용하면 됩니다.
이 또한 잘못된 인자에 대한 에러이고 IllegalArgumentException을 사용해야하는 것이 아닌가? 라는 의문이 들수 있습니다. 관례적으로, null에 대해서는 IllegalArgumentException이 아니라 NullPointerException을 사용합니다.
IndexOutOfBoundsException
IndexOutOfBoundsException 은 인덱스가 허용범위를 넘어갔을 경우 사용하면 됩니다.
이 또한 잘못된 인자에 대한 에러이고 IllegalArgumentException을 사용해야하는 것이 아닌가? 라는 의문이 들수 있습니다. 관례적으로, 인덱스가 허용범위를 넘어간 경우에 대해서는 IllegalArgumentException이 아니라 IndexOutOfBoundsException를 사용합니다.
ConcurrentModificationException
ConcurrentModificationException 은 허용되지 않는 동시 수정이 발생되었을 때 사용하면 됩니다.
UnsupportedOperationException
UnsupportedOperationException 은 지원되지 않는 메소드가 호출되었을 때 사용하면 됩니다.
Associated Posts
관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.-
Java Thread Safe Collections - List, Queue, Set, Map
( 이미지 출처 : https://openjdk.java.net )Thread safe 한 Collection(List, Queue, Set) 그리고 Map의 구현체 사용법에 대해서 기술합니다.
... 더 읽기 -
Java Random - ThreadLocalRandom, SplittableRandom, SecureRandom
( 이미지 출처 : https://openjdk.java.net )Java에서 제공하는 Random 라이브러리에 대해서 알아봅니다.
... 더 읽기 -
Java Date - Instant, LocalDateTime, ZonedDateTime
( 이미지 출처 : https://openjdk.java.net )JDK 8부터는 Instant, LocalDateTime , ZonedDateTime 등이 추가됐다. 이 들은 immutable하고 thread-safe 하기 때문에 더 편하고 안전하게 날짜와 시간을 다룰 수 있게 되었습니다.
Date의 대부분의 기능은 JDK 1.1부터 deprecated 되었고 JDK 7까지는 Calendar 혹은 GregorianCalendar를 이용해서 날짜와 시간을 다뤄왔지만 JDK 8부터는 그럴 필요가 없어졌습니다.
... 더 읽기 -
Java Validation - null check, Optional
-
How to initialize Java variables - Array, List, Set, Map
-
Java 변수 선언 & 초기화 방법 - Array, List, Set, Map
-
왜 Java 8 을 공부해야 하는가?