티스토리 뷰
자바의 에러와 예외
자바는 에러는 크게 Throwable 의 서브 클래스인 에러(Error) 와 예외(Exception) 로 나뉜다. 에러와 예외의 차이는 아래와 같다.
에러 ( Error )
에러는 java.lang.Error 의 서브 클래스들을 의미하는데 시스템에 비정상으로 발생한다. 주로 JVM에서 발생시키는데, 애플리케이션 코드에서 잡는다고 해결할 수 있는 문제들이 아니기 때문에 잡을 필요가 없다. 예를 들어 메모리 부족으로 발생하는 OutOfMemory 는 애플리케이션 코드에서 해결할 수 있는 방법이 전혀 존재하지 않는다.
예외 ( Exception )
예외는 java.lang.Exception의 서브 클래스들을 의미하는데, 개발자들이 만든 애플리케이션 코드 작업중 발생한 예외 상항들을 나타낸다.
이러한 예외는 체크 예외와 언체크 예외로 나뉜다.
에러 (Error) | 예외 ( Exception ) |
시스템 레벨에서 발생한, 애플리케이션 영역에서 해결할 수 없는 문제들을 표현한다. | 애플리케이션 레벨에서 발생한 문제들을 표현한다. |
언체크 예외(Unchecked Exception) 와 체크 예외
체크 예외 (Checked Exception)
java.lang.Exception의 서브 클래스들 중 RuntimeException을 상속하지 않은 모든 클래스들을 의미한다. 이 체크 예외는 반드시 예외처리가 필요한 예외들을 의미한다. 예외 처리란, try-catch로 잡거나 thrwos를 통해 나를 호출한 클래스로 던져야 함을 의미한다. 이러한 예외처리가 강제된다는 것은 코드가 길어지거나 복잡 해지는 것을 의미한다. 이 때문에 체크 예외의 경우에는 필요성에 대한 논의가 꾸준히 존재해 왔다.
최근에 프레임워크 혹은 라이브러리들 에서는 체크 예외를 언체크 예외로 전환하거나 애초에 언체크 예외로 처리하는 경향이 있다.
이를 반영한 것인지 코틀린(Kotlin) 에서는 언체크 예외만 존재한다.
언체크 예외 ( Unchekced Exception )
언체크 예외는 체크 예외와 반대로 예외 처리를 강제하지 않기 때문에 붙여진 이름이다. RuntimeException 혹은 그를 상속받은 서브클래스들을 의미한다. 주로 의도된 오류상황이거나, 개발자들이 주의한다면 충분히 피할 수 있는 예외상황들을 표현한다.
언체크 예외의 예로는 NullPointException과 같이 컴파일 단계에서는 체크하지 않지만 런타임 과정에서 발생할 수 있는 오류가 있다. NullPointException은 개발자가 주의한다면 충분히 피할 수 있는 예외상황이다.
예외 처리 방법
예외 복구
예외 상황을 파악 및 해결하여 원래 상태로 돌려놓는 것을 의미한다. 다만, 예외상황을 복구 할 수 있는 경우가 많지 않아 체크 예외의 필요성을 의심받는다.
예외 회피
예외를 thrwos키워드를 활용하여 자신을 호출한 곳으로 던지는 방식이다. 체크 예외의 경우 최종적으로는 예외 처리가 필요하기 때문에 대책없는 예외 회피는 무책임한 방식이다.
예외 전환
예외를 잡아서 다른 예외로 변환하는 것으로 주로 체크 예외 ➡️ 언체크 예외로 변환하여 처리하거나 포괄적인 의미를 가진 예외를 좀더 상세한 예외로 변경하는 경우에 사용한다.
try-catch 와 throws
try-catch의 경우 발생한 에러를 잡아서 전환하거나 복구하는데 사용한다. 체크 예외의 언젠가 예외를 잡아서 처리할 필요가 있다.
throws의 경우 예외 전환이나 회피과정에서 나를 호출한 메서드로 발생한 예외를 던지는 방식이다. 모든 예외의 상위 클래스를 보면 Throwable 을 상속받고 있는데 이러한 Throwable을 상속받은 클래스들은 thows 할 수 있다.
참조
'BackEnd > Java&Kotilin' 카테고리의 다른 글
[Java]병렬 스트림( Parellel Stream ) (0) | 2022.08.21 |
---|---|
[Kotilin] 변수와 함수 선언방법 (0) | 2022.08.16 |
[Java] 람다 ( Lambda ) 와 캡쳐링 (0) | 2022.08.09 |
[Java] 컴파일 방법과 Option (0) | 2022.08.02 |
DAO, VO, DTO의 정의 (0) | 2022.07.31 |
- Total
- Today
- Yesterday
- 세션 불일치
- 뾰족함
- SpringBoot 2.2
- 외부 단편화
- pass by value
- 정적 타입 언어
- 객체 풀
- Memory Fragmentation
- RestAssured
- pass by reference
- 클린 아키텍처
- 메모리 파편화
- 수직 분할
- Sticky Session
- 내부 단편화
- Clean Architecture
- 동적 타입 언어
- 동적 디스패치
- Object Pool
- 장애 해결기
- pool
- java
- 컴포짓 패턴
- 메모리 단편화
- 수평 분할
- Session
- 육각형 아키텍처
- ATDD
- multimap
- OOP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |