기타/리펙토링
Entity 에서 사용하는 enum -> 리펙토링
oiNeh
2022. 5. 27. 03:58
코드 목적은
배송 entity에서 배송상태를 보기 위해
enum 타입으로 Status을 선언 하고
next() 메서드로 상태를 변경할수 있도록 하는 코드 입니다.
변경 전 코드
private Status status;
private enum Status {
ACCEPT, //결제완료
INSTRUCT, //상품준비중
DEPARTURE, //배송지시
FINAL_DELIVERY, //배송중
NONE_TRACKING //배송완료
}
public void updateStatus() {
// 업데이트 호출하면 자동으로 됨
if (status == null) {
status = Status.ACCEPT;
} else if (status == Status.ACCEPT) {
status = Status.INSTRUCT;
} else if (status == Status.INSTRUCT) {
status = Status.DEPARTURE;
} else if (status == Status.DEPARTURE) {
status = Status.FINAL_DELIVERY;
} else if (status == Status.FINAL_DELIVERY) {
status = Status.NONE_TRACKING;
}
}
변경 후 코드(1)
private Status status;
private enum Status {
ACCEPT(0), //결제완료
INSTRUCT(1), //상품준비중
DEPARTURE(2), //배송지시
FINAL_DELIVERY(3), //배송중
NONE_TRACKING(4); //배송완료
private static final String status[]={
"결제완료",
"상품준비중",
"배송지시",
"배송중",
"배송완료"
};
private int index=0;
Status(int index) {
this.index = index;
}
private void statusNext() {
if(status.length -1 > index) {
index++;
return;
}
throw new EnumConstantNotPresentException(Status.class,"이미 완료된 배송입니다.");
}
private String getValue() {
return status[index];
}
}
public delivery() {
status = Status.ACCEPT;
}
public void next(){
status = status.statusNext();
}
public String getStatus(){
return status.getValue();
}
변경 후 코드(2)
private Status status;
private enum Status {
ACCEPT("결제완료"),
INSTRUCT("상품준비중"),
DEPARTURE("배송지시"),
FINAL_DELIVERY("배송중"),
NONE_TRACKING("배송완료");
private int index=0;
private String val;
Status(String val) {
this.val = val;
}
private Status statusNext() {
switch (this) {
case ACCEPT:
return INSTRUCT;
case INSTRUCT:
return DEPARTURE;
case DEPARTURE:
return FINAL_DELIVERY;
case FINAL_DELIVERY:
return NONE_TRACKING;
default:
throw new EnumConstantNotPresentException(Status.class,"이미 완료된 배송입니다.");
}
}
private String getValue() {
return val;
}
}
public delivery() { status = Status.ACCEPT;}
public void next(){ status = status.statusNext(); }
public String getStatus(){ return status.getValue();}
변경 1은 private static final 문자열로 저장하는 하고
index 비교하면서 상태를 바꿔주고
변경 2는 스위치를 사용해서 상태를 바꿔준다.
둘다 내가짠 코드라
둘다 차이가 거의 없다고 생각하지만
다른 사람이 보면 또 몰라서
조만간 피드백을 받아야겠다.