diff --git a/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Order.java b/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Order.java new file mode 100644 index 00000000..2589fdce --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Order.java @@ -0,0 +1,22 @@ +package com.example.refactoring._04_long_parameter_list._15_remove_flag_argument; + +import java.time.LocalDate; + +public class Order { + + private LocalDate placedOn; + private String deliveryState; + + public Order(LocalDate placedOn, String deliveryState) { + this.placedOn = placedOn; + this.deliveryState = deliveryState; + } + + public LocalDate getPlacedOn() { + return placedOn; + } + + public String getDeliveryState() { + return deliveryState; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Shipment.java b/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Shipment.java new file mode 100644 index 00000000..2d5ef501 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/Shipment.java @@ -0,0 +1,32 @@ +package com.example.refactoring._04_long_parameter_list._15_remove_flag_argument; + +import java.time.LocalDate; + +public class Shipment { + + public LocalDate deliveryDate(Order order, boolean isRush) { + if (isRush) { + return rushDeliveryDate(order); + } else { + return regularDeliveryDate(order); + } + } + + public LocalDate regularDeliveryDate(Order order) { + int deliveryTime = switch (order.getDeliveryState()) { + case "WA", "CA" -> 2; + case "OR", "TX", "NY" -> 3; + default -> 4; + }; + return order.getPlacedOn().plusDays(deliveryTime); + } + + public LocalDate rushDeliveryDate(Order order) { + int deliveryTime = switch (order.getDeliveryState()) { + case "WA", "CA", "OR" -> 1; + case "TX", "NY", "FL" -> 2; + default -> 3; + }; + return order.getPlacedOn().plusDays(deliveryTime); + } +} diff --git a/refactoring/src/test/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/ShipmentTest.java b/refactoring/src/test/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/ShipmentTest.java new file mode 100644 index 00000000..042b43ef --- /dev/null +++ b/refactoring/src/test/java/com/example/refactoring/_04_long_parameter_list/_15_remove_flag_argument/ShipmentTest.java @@ -0,0 +1,21 @@ +package com.example.refactoring._04_long_parameter_list._15_remove_flag_argument; + +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.*; + +class ShipmentTest { + + @Test + void deliveryDate() { + LocalDate placedOn = LocalDate.of(2021, 12, 15); + Order orderFromWA = new Order(placedOn, "WA"); + + Shipment shipment = new Shipment(); + assertEquals(placedOn.plusDays(1), shipment.rushDeliveryDate(orderFromWA)); // flag 파라미터 전달 보다는 메소드 명을 명확하게 한다. + assertEquals(placedOn.plusDays(2), shipment.regularDeliveryDate(orderFromWA)); + } + +} \ No newline at end of file