요구사항에 맞지 않을 경우 발생하는 Exception을 어떻게 발생시킬까 고민해보자.
예를들어 쿠폰을 사용하고 싶은데, 이미 사용한 쿠폰인 경우에는 더이상 로직을 이어가면 안된다.
그러므로 , 적절한 Exception 을 발생시키고, 로직을 종료시켜야 한다.
즉, 개발자가 로직의 흐름상 필요에 의해서 직접 발생시키는 Exception 들을 말한다,.
로직 도중 stop 해야할 곳에서는 반드시 .Exception을 이용해서 끊어주어야 한다.
그렇지 않으면, 다음 로직에서 책임이 더 커지고, 코드가 무거워지게 된다.
먼저 Exception을 적절히 이용하지 않고, 에러 메세지 출력으로 로직을 짠 코드르 보이겠다.
가독성이 좋지 못해서 핵심 비즈니스를 파악하기 어렵다.
if else처리 코딩도 어려울 것이다.
public class DeviceController {
...
public void sendShutDown() {
DeviceHandle handle = getHandle(DEV1);
// 디바이스 상태를 점검한다.
if (handle != DeviceHandle.INVALID) {
// 레코드 필드에 디바이스 상태를 저장한다.
retrieveDeviceRecord(handle);
// 디바이스가 일시정지 상태가 아니라면 종료한다.
if (record.getStatus() != DEVICE_SUSPENDED) {
pauseDevice(handle);
clearDeviceWorkQueue(handle);
closeDevice(handle);
} else {
logger.log("Device suspended. Unable to shut down");
}
} else {
logger.log("Invalid handle for: " + DEV1.toString());
}
}
...
}
예외처리를 이용해서 핵심비즈니스 코드가 명료하게 드러나는 코드를 보이겟다.
public class DeviceController {
...
public void sendShutDown() {
try {
tryToShutDown();
} catch (DeviceShutDownError e) {
logger.log(e);
}
}
private void tryToShutDown() throws DeviceShutDownError {
DeviceHandle handle = getHandle(DEV1);
DeviceRecord record = retrieveDeviceRecord(handle);
pauseDevice(handle);
clearDeviceWorkQueue(handle);
closeDevice(handle);
}
private DeviceHandle getHandle(DeviceID id) {
...
throw new DeviceShutDownError("Invalid handle for: " + id.toString());
...
}
...
}
'Spring' 카테고리의 다른 글
pub sub 구조 ( 웹소켓 채팅 ) (0) | 2021.05.08 |
---|---|
Vue.js / Springboot / 웹소켓 (Stomp) (0) | 2021.05.08 |
Exception Guide 예외처리 방법 [Spring] (0) | 2021.04.29 |
SpringSecurity 설정후 Post 요청 불가능 ( 403에러 ) 해결 (1) | 2021.04.16 |
[JPA] Error executing DDL "alter table post drop foreign key (0) | 2021.04.16 |