Exception
Exception이란?
Exception이란?
Error
시스템 레벨에서 사용하고 발생하는 것으로 어플리케이션 개발자가 관여하지 않음
Exception
어플리케이션 레벨에서 로직을 구현하면서 개발자가 예외사항 처리를 위해 사용
Exception이란?
Checked Exception
- 반드시 처리해야 함
- Compile Time에 처리
Unchecked Exception
- 명시적 처리를 강요하지 않음
- Run Time에 처리
장점
- 코드상에서 비즈니스 명확성이 높아짐
- 다양한 예외 표현 가능
- 기능요구사항정의와 연결이 가능
단점
- Trace를 생성하는 비용이 비쌈
요구사항분석
요구사항분석
- 필요한 기능에 대해 분석
- 스펙에 대한 정의
할일을 관리할 수 있는 기능을 추가한다.
Todo Item을 등록/수정/삭제 할 수 있다.
Todo/Doing/Done 로 상태를 변경할 수 있다.
Todo -> Doing, Doing -> Done, Done -> Doing, Doing -> Todo 로의 상태 변화가 가능하다.
Todo Item을 등록할 때 Todo 상태로 시작한다.
Archive할 수 있어야 하고 Archive는 Todo/Doing/Done 모든 상태에서 가능하다.
검색/상세조회 기능을 포함한다.
기능 요구사항 명세
FR-TD-1. 할 일 상태 변경
기능정의:
할 일의 상태를 변경하는 기능을 지원한다.
상태 변경은 아래와 같이 가능하다.
Todo -> Doing, Doing -> Done, Done -> Doing, Doing -> Todo
예외사항:
정의된 상태 변경 외의 상태 변경은 불가능하다.
Implementation
public TodoItem changeState(@NonNull TodoItem todo, @NonNull TodoState state)
throws IllegalStateChangeException {
TodoItem savedItem = todoItemRepository.findById(todo.getIdx())
.orElseThrow(ResourceNotFoundException::new);
final boolean possibleToChangeState = TodoState
.isPossibleToChangeState(savedItem.getState(), state);
if (!possibleToChangeState) {
throw new IllegalStateChangeException();
}
savedItem.setState(state);
return todoItemRepository.save(savedItem);
}
ControllerAdvice
@ExceptionHandler(FlexibleException.class)
@ResponseBody
public Object handleFlexibleException(HttpServletRequest request, HttpServletResponse response, FlexibleException e) {
return handleDeducibleData(request, response, e);
}
@ExceptionHandler(StrictException.class)
@ResponseBody
public Object handleStrictException(HttpServletRequest request, HttpServletResponse response, StrictException e) {
return handleDeducibleData(request, response, e);
}
private Object handleDeducibleData(HttpServletRequest request, HttpServletResponse response, DeducibleData data) {
response.setCharacterEncoding(Constants.CHARSET_UTF8);
response.setContentType(Constants.CONTENT_TYPE_APPLICATION_JSON_UTF8);
return data.get();
}
Exception
By Hyeonil Jeong
Exception
- 490