한국도로공사 공고를 추가하면서 낙찰방법 분류 로직을 따로 만들었다.
이때 추가한 enum.
BidAwardMethodCategory
BidAwardMethodStatus
BidAwardMethodSource
정해진 값만 사용하도록 묶어두는 타입.
문자열로 상태를 관리하면 이런 오타가 가능하다.
String status = "TAREGT";
enum이면 선언된 값만 사용할 수 있다.
ReviewStatus status = ReviewStatus.TARGET;
값이 정해져 있는 상태나 분류값은 문자열보다 enum으로 두는 게 안전하다.
낙찰방법 종류를 판단할 때 사용했다.
boolean smallAmountEstimate =
awardMethodCategory
== BidAwardMethodCategory.SMALL_AMOUNT_ESTIMATE;
boolean qualificationReview =
awardMethodCategory
== BidAwardMethodCategory.QUALIFICATION_REVIEW;
Category
→ 어떤 낙찰방법인지
Status
→ 판정 상태가 어떤지
둘을 따로 관리했다.
예를 들어 적격심사로 분류됐더라도 첨부문서 근거만 있는 경우에는 추가 확인이 필요했다.
if (qualificationReview
&& awardMethodStatus == BidAwardMethodStatus.LIKELY) {
additionalCheckReasons.add(
"첨부문서 근거의 적격심사 여부 확인 필요"
);
}
즉 QUALIFICATION_REVIEW와 LIKELY는 역할이 다르다.
QUALIFICATION_REVIEW
→ 적격심사로 분류
LIKELY
→ 아직 추가 확인이 필요한 상태
DTO에는 enum 이름을 문자열로 저장했다.
qualification.setAwardMethodCategory(
result.category().name()
);
name()
BidAwardMethodCategory.QUALIFICATION_REVIEW.name()
결과
QUALIFICATION_REVIEW
다시 enum으로 사용할 때는 valueOf().
BidAwardMethodCategory.valueOf(
qualification.getAwardMethodCategory()
);
문자열 이름과 enum 상수 이름이 정확히 같아야 한다.
내 코드에서는 이렇게 사용했다.
Classifier
→ enum으로 판정
→ name()
→ DTO에 문자열 저장
→ valueOf()
→ 다시 enum으로 사용
이번 코드에서는 낙찰방법의 종류와 판정 상태를 따로 관리하기 위해 enum을 사용했다.