기타/리펙토링

entity enum 리펙토링 2

oiNeh 2022. 5. 27. 17:49

이전화 

https://oineh.tistory.com/4

 

Entity 에서 사용하는 enum -> 리펙토링

코드 목적은 배송 entity에서 배송상태를 보기 위해 enum 타입으로 Status을 선언 하고 next() 메서드로 상태를 변경할수 있도록 하는 코드 입니다.  변경 전 코드 private Status status; private enum Status {..

oineh.tistory.com

 

 

피드백 살짝 받고 수정한 코드 입니다.


@Enumerated(STRING)
private Status status;

private interface StatusUse {
    String get();
    Status next();
}// |
//  V
private enum Status implements  StatusUse {
    ACCEPT {
        public String get()  { return "결제완료"; }
        public Status next() { return INSTRUCT; }
    },
    INSTRUCT {
        public String get()  { return "상품준비중"; }
        public Status next() { return DEPARTURE; }
    },
    DEPARTURE {
        public String get()  { return "배송지시"; }
        public Status next() { return FINAL_DELIVERY; }
    },
    FINAL_DELIVERY {
        public String get()  { return "배송중"; }
        public Status next() { return NONE_TRACKING; }
    },
    NONE_TRACKING {
        public String get()  { return "배송완료"; }
        public Status next()  {
            throw new ArrayIndexOutOfBoundsException("이미 완료된 배송입니다.");
        }
    };

    private Status statusNext() {
        return this.next();
    }

    private String getValue() {
        return this.get();
    }

}

protected Delivery() {
    status = Status.ACCEPT;
}

public void next() {
    status = status.statusNext();
}

public String getStatus() {
    return status.getValue();
}