티스토리 뷰
오류(error)
: 시스템에 비정상적인 상황이 생겼을 때 발생한다. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류이다. 따리사 개발자가 미리 예측하여 처리할 수 없기 때문에 어플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 된다.
예외(exception)
: 개발자가 구현한 로직에서 발생한다. 즉, 예외는 발생할 상황을 미리 예측하여 처리할 수 있다. 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는 것이 중요하다.
-- 예외클래스 구조 그림
checked/unchecked exception
checked excepiton | unchecked exception | |
처리여부 | 반드시 예외를 처리해야 함 | 명시적인 처리를 하지 않아도 됨 |
확인시점 | 컴파일 단계 | 실행 단계 |
예외발생 시 트랜잭션 처리 | 롤백 하지 않음 | 롤백 함 |
대표 예외 |
exception을 상속받는 하위 클래스 중 Runtime Exception를 제외한 모든 예외 - IOException - SQLException |
Runtime Exception 하위 예외 - NullPointerException - IllegalArgumentException - IndexOutOfBoundException - SystemException |
checked exception과 unchecked exception의 가장 명확한 구분 기준은 반드시 처리를 해야하는지이다.
checked exception이 발생할 가능성이 있는 메소드라면 반드시 로직을 try/catch로 감싸거나 throw로 던져서 처리해야 한다. 반면에 unchecked exception은 명시적인 예외처리를 하지 않아도 된다. 이 예외는 피할 수 있지만 개발자가 부주의해서 발생하는 경우가 대부분이고, 미리 예측하지 못했던 상황에서 발행하는 예외가 아니기 때문에 굳이 로직으로 처리를 할 필요가 없도록 만들어져 있다.
예외를 확인할 수 있는 시점에서도 구분할 수 있다. 일반적으로 컴파일 단계에서 명확하게 exception 체크가 가능한 것을 checked exception이라 하며, 실행 과정 중 특정 논리에 의해 발견되는 exception을 unchecked exception이라한다.
예외처리 방법
1) 호출자에게 보고하지 않고 처리하는 방법
public void Test() {
try {
// 소스가 실행되는 곳
} catch (Throwable e) {
// 예외가 발생 시 조치를 취하는 곳
}
}
Test();
2) 호출자에게 바로 보고하는 방법
- 중요한 오류는 처리하지 말고 호출자에게 넘긴다.
public void Test() throws Throwable {
}
// 호출하는 메서드가 오류를 던진다고 선언되어 있으면 반드시 try...catch 문을 사용해서 호출해야 한다.
try{
Test(); // 예외가 발생 시 즉시 호출자에게 보고한다.
} catch (Throwable e) {
// 예외 처리하는 곳. 중요한 예외는 호출자가 처리한다.
}
3) 선 조치 후 보고 방법
- 중요한 예외 발생 시 보고하기 전에 먼저 오류 처리하고 보고 함.
public void Test() throws Throwable {
try {
} catch (Throwable e) {
// 일단 오류 처리하고..
// 호출자에게 오류 내용 보고함
throw new Throwable("요류내용...");
}
}
try {
Test(); // 치명적인 오류 발생 시 내부적으로 처리한 후 보고한다.
} catch(Throwable e) {
// 예외에 대한 추가 조치를 한다.
}
참고)
https://gocoding.tistory.com/146
http://www.nextree.co.kr/p3239/
'줍줍 > 코딩하다 안거' 카테고리의 다른 글
mySQL LAST_INSERT_ID() (0) | 2019.06.17 |
---|---|
logback 설정 에러 (0) | 2019.06.06 |
로깅 설정 (0) | 2019.05.21 |
클래스 멤버와 인스턴스 멤버 (0) | 2018.12.30 |
Date와 Timestamp 차이 (0) | 2018.12.09 |
- Total
- Today
- Yesterday
- NoClassDefFoundError
- afterCompletion
- postHandler
- 어노테이션
- JoinPoint
- setter 인젝션
- servlet context
- exclude-mapping
- 횡단 관심
- aspect oriented programming
- 컨트롤러
- SqlSessionFactoryBean
- Class path contains multiple SLF4J bindings
- LoggingEvent
- handlermapping
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
- Controller
- multiple SLF4J bindings
- 스프링 컨테이너
- ViewResolver
- XmlWebApplicationContext
- @Autowired
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- blocking
- application context
- aop
- 의존성 주입
- 의존성
- preHandler
- 검색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |