@@ -0,0 +1,85 @@
+package christmas.domain;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class EventResult {
+    private static final String NON_BADGE = "없음";
+    private static final String STAR_BADGE = "별";
+    private static final String TREE_BADGE = "트리";
+    private static final String SANTA_BADGE = "산타";
+    private static final int STAR_BADGE_MINIMUM_AMOUNT = 5000;
+    private static final int STAR_BADGE_MAXIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MINIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MAXIMUM_AMOUNT = 20000;
+    private static final int SANTA_BADGE_MINIMUM_AMOUNT = 20000;
+
+    private final Map<BenefitType, Integer> allBenefit;
+
+    public EventResult(Map<BenefitType, Integer> allBenefit) {
+        this.allBenefit = allBenefit;
+    }
+
+    public int calculateTotalBenefitAmount() {
+        int totalBenefitAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalBenefitAmount += allBenefit.get(benefitType);
+        }
+
+        return totalBenefitAmount;
+    }
+
+    public int calculateTotalDiscountAmount() {
+        int totalDiscountAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalDiscountAmount += allBenefit.get(benefitType);
+        }
+        if (allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice()) {
+            totalDiscountAmount -= Menu.CHAMPAGNE.getPrice();
+        }
+
+        return totalDiscountAmount;
+    }
+
+    public boolean isReceivedGiftBenefit() {
+        return allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice();
+    }
+
+    public List<BenefitType> checkWhichBenefitExist() {
+        List<BenefitType> existingBenefit = new ArrayList<>();
+        BenefitType[] benefitTypes = BenefitType.values();
+
+        for (BenefitType benefitType : benefitTypes) {
+            if (allBenefit.get(benefitType) != 0) {
+                existingBenefit.add(benefitType);
+            }
+        }
+
+        return existingBenefit;
+    }
+
+    public String decideEventBadge() {
+        int totalBenefitAmount = calculateTotalBenefitAmount();
+
+        if ((totalBenefitAmount >= STAR_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < STAR_BADGE_MAXIMUM_AMOUNT)) {
+            return STAR_BADGE;
+        }
+        if ((totalBenefitAmount >= TREE_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < TREE_BADGE_MAXIMUM_AMOUNT)) {
+            return TREE_BADGE;
+        }
+        if ((totalBenefitAmount >= SANTA_BADGE_MINIMUM_AMOUNT)) {
+            return SANTA_BADGE;
+        }
+        return NON_BADGE;
+    }
+
+    public Map<BenefitType, Integer> getAllBenefit() {
+        return Collections.unmodifiableMap(allBenefit);
+    }
+}
\ No newline at end of file

리뷰: 맞아요!! 저도 개인적으로 이 메서드의 로직을 만들었던 방식이 아쉬웠는데요 ,, 말씀해 주신 방법이 훨씬 깔끔한 것 같아요 대신

if ((totalBenefitAmount >= SANTA_BADGE_MINIMUM_AMOUNT)) {

return SANTA_BADGE;

}

if (totalBenefitAmount >= TREE_BADGE_MINIMUM_AMOUNT) {

return TREE_BADGE;

}

if (totalBenefitAmount >= STAR_BADGE_MINIMUM_AMOUNT) {

return STAR_BADGE;

}

return NON_BADGE;

이런식으로 산타 배지가 제일 위로 가야 30000원일 때 별 배지를 리턴하지 않고 산타 배지를 리턴 할 것 같아요
제가 이해한게 맞는지 궁금합니다 @Uniaut
Maximum이라는 표현은 해당 값을 포함하는 표현이란 것을 놓쳤던 것 같네요!! 날카로운 지적 감사합니다