Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 현장학습
- spring
- jsp
- Docker
- 자바스크립트
- jpa
- 에러
- 메서드
- SpringBoot
- 스프링
- gradle
- REACT
- json
- lightsail
- 알고리즘
- 글로벌
- 맥길대학교
- jQuery
- Keycloak 17.0.1
- vue
- Flutter
- 인텔리제이
- ES6
- nginx
- aws
- JavaScript
- arraylist
- vue.js
- keycloak
- java
Archives
- Today
- Total
korean IT student
[Java-Live-Study] 9주차 - 예외 처리 본문
목표
자바의 예외 처리에 대해 학습하세요.
학습할 것 (필수)
- 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
- 자바가 제공하는 예외 계층 구조
- Exception과 Error의 차이는?
- RuntimeException과 RE가 아닌 것의 차이는?
- 커스텀한 예외 만드는 방법
예외(Exception)와 에러(Error)
Exception
- 프로그램 실행 중 개발자가 구현한 로직에서 던져진 문제에 대한 정보를 담는 클래스를 말하며, 자바에서의 Exception은 컴파일 시점에서 컴파일러에게 발견되는 확인된 예외이다.
- 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.
Error
- 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 자바에서는 error라고 한다.
- 에러는 메모리 부족, 스택오버플로우처럼 JVM이나 하드웨어 등의 기반 시스템 문제로 발생
- 발생하면 무조권 프로그램은 비정상 종료되기 때문에 애초에 발생하지 않도록 해야 한다.
자바가 제공하는 예외 계층 구조
- 모든 예외의 조상이 되는 Exception 클래스와 모든 오류의 조상이 되는 Error 클래스의 부모 클래스이다.
- String getMesage(), void printStackTrace(), String toString() 메소드가 포함된다.
- Exception을 상속받은 클래스들 중에서 RuntimeException을 제외하고 모두를 Unchecked Exception이라고 한다.
Checked Exception
- Checked Exception은 컴파일 시점에서 확인할 수 있는 예외처리이다.
- 만약 코드 내에서 Checked Exception이 발생한다면, 반드시 try-catch로 처리하거나 throws를 사용하여 호출한 고승로 처리를 넘겨야한다.
Unchecked Exception
- 컴파일 단계에서 확인할 수 없는 예외 - RuntimeException
그럼 Runtime Exception은 왜 예외를 명세하지 않아도 되도록 했을까? Runtime Exception은 프로그램 코드의 문제로 발생하는 예외이다(즉 코드를 짠 개발자의 잘못). 따라서 클라이언트 쪽(메서드를 호출하는 쪽)에서 이를 복구(or 회복)하거나 대처할 수 있을 거라고 예상하긴 어렵다. 또 Runtime Exception은 프로그램 어디서나 매우 빈번하게 발생할 수 있기 때문에 모든 Runtime Exception을 메서드에 명시하도록 강제하는 것은 프로그램의 명확성을 떨어뜨릴 수 있다.
따라서 클라이언트가 exception을 적절히 회복할 수 있을 것이라고 예상되는 경우 checked exception으로 만들고, 그렇지 않은 경우 unchecked exception으로 만드는 것이 좋다.
출처 - https://wisdom-and-record.tistory.com/46
자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
try-catch-finally
try{
//예외 발생 가능 코드
}catch (예외클래스 e1){
//예외 처리
}finally{
//항상 실행
}
- try 블록에는 예외 발생 가능 코드가 위치하고 예외가 발생하면 catch 블록을 실행한다.
- 마지막으로 finally 블록이 실행된다.
- try 블록과 catch 블록에서 return문을 사용하더라도 finally 블록은 항상 실행된다.
다중 catch
try{
//예외 발생 가능 코드
}catch (예외클래스 e1){
//예외 처리
}catch (예외클래스 e2){
//예외 처리
}
예제1)
-- 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 합니다.
-- NullPointerException (하위 예외 클래스)은 Exception (상위 예외 클래스)을 상속
try{
}catch(NullPointerException e){
// null 실행
}catch(Exception e){
//NullPointerException 이외의 예외 발생시 실행
}
- try 블록 내부는 다양한 종류의 에러가 일어날 수 있기 때문에 위와 같이 여러 개의 catch 블록을 작성할 수 있다.
멀티 catch
try{
String person = null;
System.out.println(person.toString());
}catch ( NumberFormatException | NullPointerException e){
e.printStackTrace();
}
- 자바 7부터 하나의 catch 블록에서 여러 개의 예외를 처리할 수 있도록 멀티 catch 기능을 추가했다.
- 나열된 예외 클래스들이 상속 관계에 있다면 컴파일 불가능주의!!!
throw
String person = null;
if(person == null)
{
throw new NullPointerException("return value is null at method person");
}
- 조건에 부합하면 예외를 직접 발생시킬 수 있다.
- 발생시킬 수 있는 예외는 Exception의 최상위 클래스인 Throwable class의 하위 클래스라면 모두 가능
throws
public class CustomException extends Exception{
CustomException(String msg){
super(msg);
}
}
public static void main(String[] args) {
CustomException customException = new CustomException("customException return");
try {
throw customException;
} catch (CustomException e){
System.out.println(e);
}
}
- 메서드 선언부에 throws 키워드를 통해 해당 메서드를 호출한 메서드에게로 예외를 던진다.
- 예외를 선언함으로서 메서드를 사용할때 발생할수 있는 에러를 명시적으로 알 수 있다.
- 이때 예외는 해당메서드를 호출하는 어느곳에서든 한번은 try~catch로 처리해주어야 한다.
'back-end > JAVA' 카테고리의 다른 글
[Java-Live-Study] 11주차 - Enum (0) | 2021.12.01 |
---|---|
[Java-Live-Study] 10주차 - 멀티쓰레드 프로그래밍 (0) | 2021.11.25 |
[Java-Live-Study] 8주차 - 인터페이스 (0) | 2021.11.02 |
[Java-Live-Study] 7주차 - 패키지 (0) | 2021.10.26 |
[Java-Live-Study] 6주차 - 상속 (0) | 2021.09.27 |
Comments