ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: 모델 하위 타입을 클래스로 하셨는데 선택하신 기준이 있는지 궁금해요
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: 만약 외부에서 반드시 접근해야만 한다면 private을 빼는것도 좋아보입니다
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: class func 대신 static func을 쓰신 이유는 오버라이딩이 불가능하도록 의도하신거 맞을까요?👍🏻
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: [UIScreen.main 공식문서](https://developer.apple.com/documentation/uikit/uiscreen/1617815-main)
우연히 Apple Documentation에서 발견했는데, main은 Deprecated 되었더라고요
상단 공식문서 내용에서 추천하는 다른방법을 사용해보시는 것도 좋을거같아요
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: 학습 가이드에서 참고했는데,
 메소드 네이밍시 함수로 작성하는게 좋다고 되어있어 참고하시면 좋아 보입니다
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: uuid 없이 만드는 방식이 있는지는 몰랐는데, 신선하고 더 깔끔한 방식이네요👏🏻
@@ -0,0 +1,91 @@
+//
+//  ViewController.swift
+//  DrawingApp
+//
+//  Created by 김하림 on 2023/03/28.
+//
+
+import UIKit
+import OSLog
+
+class ViewController: UIViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+     
+        let rect1 = RectangleFactory.createRectangle()
+        os_log("\(rect1.description)")
+    }
+}
+
+protocol RectangleComponent {
+    var id:String { get }
+    var size:RectangleSize { get }
+    var position:RectanglePosition { get }
+    var backGroundColor:(red:Int, green:Int, blue:Int) { get }
+    var alpha:Int { get }
+}
+
+class RectangleSize {
+    private var width:Double = 150
+    private var height:Double = 120
+    
+    func getWidth() -> Double {
+        return self.width
+    }
+    func getHeight() -> Double {
+        return self.height
+    }
+}
+class RectanglePosition {
+    private var X:Double
+    private var Y:Double
+    
+    init(X: Double, Y: Double) {
+        self.X = X
+        self.Y = Y
+    }
+    func randomPosition() -> RectanglePosition {
+        let x = Double.random(in: 0...UIScreen.main.bounds.width)
+        let y = Double.random(in: 0...UIScreen.main.bounds.height)
+        return RectanglePosition(X: x, Y: y)
+    }
+    func getPositionX() -> Double {
+        return self.X
+    }
+    func getPositionY() -> Double {
+        return self.Y
+    }
+}
+
+
+class IdRandomizer {
+    func randomString() -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        var randomString = ""
+        for _ in 0..<9 {
+                let randomIndex = Int.random(in: 0..<letters.count)
+                let letter = letters[letters.index(letters.startIndex, offsetBy: randomIndex)]
+                randomString.append(letter)
+        }
+        return "\(randomString.prefix(3))-\(randomString.prefix(6).suffix(3))-\(randomString.suffix(3))"
+        }
+}
+
+class RectangleFactory {
+    static func createRectangle() -> Rectangle {
+        let id = IdRandomizer().randomString()
+        let size = RectangleSize()
+        let position = RectanglePosition(X: 0, Y: 0).randomPosition()
+        let backGroundColor = (red: Int.random(in: 0...255), green: Int.random(in: 0...255), blue: Int.random(in: 0...255))
+        let alpha = Int.random(in: 1...10)
+
+        return Rectangle(
+            id: id,
+            size: size,
+            position: position,
+            backGroundColor: backGroundColor,
+            alpha: alpha
+        )
+    }
+}

리뷰: 프로토콜에 선언된 프로퍼티들은 채택했을 때 private 접근제어자를 사용하지 못하는 걸로 알고 있습니다.
접근제어자가 필요한 요소들만 프로토콜에 추가하는 것도 좋아 보입니다.
@@ -0,0 +1,72 @@
+package christmas.domain;
+
+import christmas.constant.Constant;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class Benefit {
+
+    private final Map<Event, Integer> details;
+
+    public Benefit() {
+        this.details = new EnumMap<>(Event.class);
+        initialBenefitDetails();
+    }
+
+    public int calculateTotalDiscount() {
+        return details.values()
+                .stream()
+                .reduce(0, Integer::sum);
+    }
+
+    public void addDiscountIntoDetails(Event event, int discount) {
+        details.computeIfPresent(event, (key, value) -> value + discount);
+    }
+
+    public String detailsToString() {
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        if (calculateTotalDiscount() != 0) {
+            sb.setLength(0);
+            appendDetails(sb);
+        }
+        return sb.toString();
+    }
+
+    public int calculatePresentationPrice() {
+        return details.get(Event.PRESENTATION);
+    }
+
+    public String presentationMenuToString() {
+        Event presentation = Event.PRESENTATION;
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        int discount = details.get(presentation);
+        if (discount != 0) {
+            sb.setLength(0);
+            sb.append(presentation.getTarget());
+            sb.append(Constant.SPACE);
+            sb.append(String.format(Constant.MENU_UNIT, Math.abs(discount / Event.PRESENTATION.getDiscount())));
+            sb.append(System.lineSeparator());
+        }
+        return sb.toString();
+    }
+
+
+    private void appendDetails(StringBuilder benefitDetail) {
+        for (Entry<Event, Integer> entry : details.entrySet()) {
+            String eventMessage = entry.getKey().getMessage();
+            int discount = entry.getValue();
+            if (discount != 0) {
+                benefitDetail.append(eventMessage);
+                benefitDetail.append(Constant.SPACE);
+                benefitDetail.append(String.format(Constant.PRICE_UNIT, discount));
+                benefitDetail.append(System.lineSeparator());
+            }
+        }
+    }
+
+    private void initialBenefitDetails() {
+        Event.getAllEvent().forEach(event -> details.put(event, 0));
+    }
+
+}

리뷰: add 메소드를 구현하는 것보다는 생성자에서 완성된 EnumMap을 받는 게 좋을 것 같아요.
add 메소드를 이용해서 EnumMap을 만드는 책임은 BenefitBuilder 객체를 새로 만들어서 맡기는 게 좋아요.
@@ -0,0 +1,83 @@
+package christmas.service;
+
+import christmas.constant.Constant;
+import christmas.domain.Badge;
+import christmas.domain.Benefit;
+import christmas.domain.Event;
+import christmas.domain.OrderMenu;
+import christmas.view.input.template.InputCallback;
+import christmas.view.input.template.InputTemplate;
+
+public class ChristmasService {
+
+    private final InputTemplate inputTemplate;
+
+    public ChristmasService() {
+        this.inputTemplate = new InputTemplate();
+    }
+
+    public <T> T getInputRequestResult(InputCallback<T> callback) {
+        return inputTemplate.execute(callback);
+    }
+
+    public Benefit getBenefit(OrderMenu orderMenu, int day) {
+        Benefit benefit = new Benefit();
+        addDiscountIntoBenefitDetails(orderMenu, benefit, day);
+        return benefit;
+    }
+
+    public String getOrderMenuDetails(OrderMenu orderMenu) {
+        return orderMenu.detailsToString();
+    }
+
+    public String getTotalPriceBeforeDiscount(OrderMenu orderMenu) {
+        return String.format(Constant.PRICE_UNIT + System.lineSeparator(), orderMenu.calculateTotalPrice());
+    }
+
+    public String getPresentationMenu(Benefit benefit) {
+        return benefit.presentationMenuToString();
+    }
+
+    public String getBenefitDetails(Benefit benefit) {
+        return benefit.detailsToString();
+    }
+
+    public String getTotalDiscount(Benefit benefit) {
+        return String.format(Constant.PRICE_UNIT + System.lineSeparator(), benefit.calculateTotalDiscount());
+    }
+
+    public String getTotalPriceAfterDiscount(OrderMenu orderMenu, Benefit benefit) {
+        int totalPrice = orderMenu.calculateTotalPrice();
+        int totalDiscount = benefit.calculateTotalDiscount();
+        totalPrice += (totalDiscount - benefit.calculatePresentationPrice());
+        return String.format(Constant.PRICE_UNIT + System.lineSeparator(), totalPrice);
+    }
+
+    public String getBadge(Benefit benefit) {
+        return Badge.findByTotalDiscount(benefit.calculateTotalDiscount());
+    }
+
+
+    private void addDiscountIntoBenefitDetails(OrderMenu orderMenu, Benefit benefit, int day) {
+        Event.findAllByDay(day)
+                .stream()
+                .filter(event -> orderMenu.calculateTotalPrice() > event.getCondition())
+                .forEach(event -> benefit.addDiscountIntoDetails(event, calculateDiscount(orderMenu, event, day)));
+    }
+
+    private int calculateDiscount(OrderMenu orderMenu, Event event, int day) {
+        int result = 0;
+        int orderMenuCount = orderMenu.countMenuByEventTarget(event.getTarget());
+        int discount = event.getDiscount();
+        int discountFromTotal = event.getDiscountFromTotal();
+        result -= (discount * orderMenuCount) + discountFromTotal;
+
+        if (event == Event.CHRISTMAS && day <= 25) {
+            result -= discount * (day - 1) + 1000;
+        }
+        if (event == Event.PRESENTATION) {
+            result -= discount;
+        }
+        return result;
+    }
+}

리뷰: 이런 자명한 코드들은 메소드로 분리할 필요가 없어요. 서비스 객체까지 이용할 필요는 더더욱 없어요.