From d2ae7b47348e13cc4b65c60b8139c92a43401047 Mon Sep 17 00:00:00 2001 From: kangs Date: Tue, 27 Aug 2024 21:04:17 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=8B=A4=ED=96=89=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 11 +++++++++++ src/main/java/Input.java | 8 ++++++++ src/main/java/Operations.java | 20 ++++++++++++++++++++ src/main/java/Operator.java | 30 ++++++++++++++++++++++++++++++ src/main/java/Output.java | 6 ++++++ 5 files changed, 75 insertions(+) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/Input.java create mode 100644 src/main/java/Operations.java create mode 100644 src/main/java/Operator.java create mode 100644 src/main/java/Output.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 0000000..e57b515 --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,11 @@ +import java.util.Scanner; + + +public class Calculator { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + String[] values = Input.readInput(scanner); + int result = Operator.calculate(values); + Output.printResult(result); + } +} \ No newline at end of file diff --git a/src/main/java/Input.java b/src/main/java/Input.java new file mode 100644 index 0000000..3813a1d --- /dev/null +++ b/src/main/java/Input.java @@ -0,0 +1,8 @@ +import java.util.Scanner; + +public class Input { + public static String[] readInput(Scanner scanner) { + System.out.print("수식을 입력하세요: "); + return scanner.nextLine().split(" "); + } +} \ No newline at end of file diff --git a/src/main/java/Operations.java b/src/main/java/Operations.java new file mode 100644 index 0000000..e742ee9 --- /dev/null +++ b/src/main/java/Operations.java @@ -0,0 +1,20 @@ +public class Operations { + public int add(int a, int b) { + return a + b; + } + + public int subtract(int a, int b) { + return a - b; + } + + public int multiply(int a, int b) { + return a * b; + } + + public int divide(int a, int b) { + if (b == 0) { + throw new ArithmeticException("0으로 나눌 수 없습니다."); + } + return a / b; + } +} \ No newline at end of file diff --git a/src/main/java/Operator.java b/src/main/java/Operator.java new file mode 100644 index 0000000..aac899d --- /dev/null +++ b/src/main/java/Operator.java @@ -0,0 +1,30 @@ +public class Operator { + public static int calculate(String[] values) { + Operations operations = new Operations(); + int result = Integer.parseInt(values[0]); + + for (int i = 1; i < values.length; i += 2) { + String operator = values[i]; + int nextNumber = Integer.parseInt(values[i + 1]); + + switch (operator) { + case "+": + result = operations.add(result, nextNumber); + break; + case "-": + result = operations.subtract(result, nextNumber); + break; + case "*": + result = operations.multiply(result, nextNumber); + break; + case "/": + result = operations.divide(result, nextNumber); + break; + default: + System.out.println("잘못된 연산자입니다."); + return 0; + } + } + return result; + } +} \ No newline at end of file diff --git a/src/main/java/Output.java b/src/main/java/Output.java new file mode 100644 index 0000000..4eb4f1c --- /dev/null +++ b/src/main/java/Output.java @@ -0,0 +1,6 @@ +public class Output { + + public static void printResult(int result) { + System.out.println("결과: " + result); + } +} \ No newline at end of file From 33e2d0bbe8cbecedca9e89ca91e284aa011b4235 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:42:03 +0900 Subject: [PATCH 02/18] =?UTF-8?q?ADD(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/calculator/controller/CalculatorController.java diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java new file mode 100644 index 0000000..f0f535e --- /dev/null +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -0,0 +1,23 @@ +package calculator.controller; + +import calculator.model.Operator; +import calculator.view.InputView; +import calculator.view.OutputView; + +public class CalculatorController { + private final Operator operator; + private final InputView inputView; + private final OutputView outputView; + + public CalculatorController(Operator operator, InputView inputView, OutputView outputView) { + this.operator = operator; + this.inputView = inputView; + this.outputView = outputView; + } + + public void run() { + String[] values = inputView.formulaInput(); + int result = operator.calculate(values); + outputView.resultOutput(result); + } +} From 261ce04542fe76966175f24c168826b248df86f6 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:43:32 +0900 Subject: [PATCH 03/18] =?UTF-8?q?ADD(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=8B=9D=20=EC=9E=85=EB=A0=A5=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/view/InputView.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/calculator/view/InputView.java diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java new file mode 100644 index 0000000..84d94e5 --- /dev/null +++ b/src/main/java/calculator/view/InputView.java @@ -0,0 +1,11 @@ +package calculator.view; + +import java.util.Scanner; + +public class InputView { + public String[] formulaInput() { + Scanner scanner = new Scanner(System.in); + System.out.print("수식을 입력하세요 : "); + return scanner.nextLine().split(" "); + } +} \ No newline at end of file From c44c0c4a77908e8ad8ac0ccff8e50de0497c2c85 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:45:11 +0900 Subject: [PATCH 04/18] =?UTF-8?q?refactor(Calculator)=20:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add를 addition으로 수정 --- src/main/java/{ => calculator/model}/Operations.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename src/main/java/{ => calculator/model}/Operations.java (84%) diff --git a/src/main/java/Operations.java b/src/main/java/calculator/model/Operations.java similarity index 84% rename from src/main/java/Operations.java rename to src/main/java/calculator/model/Operations.java index e742ee9..63f644b 100644 --- a/src/main/java/Operations.java +++ b/src/main/java/calculator/model/Operations.java @@ -1,5 +1,7 @@ +package calculator.model; + public class Operations { - public int add(int a, int b) { + public int addition(int a, int b) { return a + b; } From 30ec2e9aa99b28527d6778004e94611febf61c3b Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:46:35 +0900 Subject: [PATCH 05/18] =?UTF-8?q?ADD(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20enum=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/OperatorType.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/calculator/model/OperatorType.java diff --git a/src/main/java/calculator/model/OperatorType.java b/src/main/java/calculator/model/OperatorType.java new file mode 100644 index 0000000..444a44e --- /dev/null +++ b/src/main/java/calculator/model/OperatorType.java @@ -0,0 +1,20 @@ +package calculator.model; + +public enum OperatorType { + ADDITION, SUBTRACT, MULTIPLY, DIVIDE; + + public static OperatorType fromString(String symbol) { + switch (symbol) { + case "+": + return ADDITION; + case "-": + return SUBTRACT; + case "*": + return MULTIPLY; + case "/": + return DIVIDE; + default: + throw new IllegalArgumentException("잘못된 연산자입니다."); + } + } +} \ No newline at end of file From dc2d1a53f3c88b3b9f91c612fc5b9f85151c9a46 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:47:15 +0900 Subject: [PATCH 06/18] =?UTF-8?q?ADD(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/view/OutputView.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/calculator/view/OutputView.java diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java new file mode 100644 index 0000000..86f2da4 --- /dev/null +++ b/src/main/java/calculator/view/OutputView.java @@ -0,0 +1,8 @@ +package calculator.view; + +public class OutputView { + + public void resultOutput(int result) { + System.out.print("결과 : " + result); + } +} \ No newline at end of file From 684c9b9a2f4bd025de23130ce89cb8a1bb55251e Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:48:13 +0900 Subject: [PATCH 07/18] =?UTF-8?q?refactor(Calculator)=20:=20OperatorType?= =?UTF-8?q?=20Enum=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=97=B0=EC=82=B0?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/{ => calculator/model}/Operator.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) rename src/main/java/{ => calculator/model}/Operator.java (53%) diff --git a/src/main/java/Operator.java b/src/main/java/calculator/model/Operator.java similarity index 53% rename from src/main/java/Operator.java rename to src/main/java/calculator/model/Operator.java index aac899d..f237207 100644 --- a/src/main/java/Operator.java +++ b/src/main/java/calculator/model/Operator.java @@ -1,28 +1,32 @@ +package calculator.model; + public class Operator { - public static int calculate(String[] values) { - Operations operations = new Operations(); + private final Operations operations; + + public Operator() { + this.operations = new Operations(); + } + + public int calculate(String[] values) { int result = Integer.parseInt(values[0]); for (int i = 1; i < values.length; i += 2) { - String operator = values[i]; + OperatorType operatorType = OperatorType.fromString(values[i]); int nextNumber = Integer.parseInt(values[i + 1]); - switch (operator) { - case "+": - result = operations.add(result, nextNumber); + switch (operatorType) { + case ADDITION: + result = operations.addition(result, nextNumber); break; - case "-": + case SUBTRACT: result = operations.subtract(result, nextNumber); break; - case "*": + case MULTIPLY: result = operations.multiply(result, nextNumber); break; - case "/": + case DIVIDE: result = operations.divide(result, nextNumber); break; - default: - System.out.println("잘못된 연산자입니다."); - return 0; } } return result; From 7e09213ce55f579334b3f09950a3bf44f22ef651 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:48:50 +0900 Subject: [PATCH 08/18] =?UTF-8?q?ADD(Calculator)=20:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=8B=A4=ED=96=89=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/CalculatorMain.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/calculator/CalculatorMain.java diff --git a/src/main/java/calculator/CalculatorMain.java b/src/main/java/calculator/CalculatorMain.java new file mode 100644 index 0000000..2e4d777 --- /dev/null +++ b/src/main/java/calculator/CalculatorMain.java @@ -0,0 +1,18 @@ +package calculator; + +import calculator.controller.CalculatorController; +import calculator.model.Operator; +import calculator.view.InputView; +import calculator.view.OutputView; + + +public class CalculatorMain { + public static void main(String[] args) { + Operator operator = new Operator(); + InputView inputView = new InputView(); + OutputView outputView = new OutputView(); + + CalculatorController controller = new CalculatorController(operator, inputView, outputView); + controller.run(); + } +} \ No newline at end of file From af42101b3759eccd7ec96aaa81b20035a0ddb2e5 Mon Sep 17 00:00:00 2001 From: kangs Date: Fri, 30 Aug 2024 22:49:40 +0900 Subject: [PATCH 09/18] =?UTF-8?q?DELETE(Calculator)=20:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=EC=9D=84=20=ED=86=B5=ED=95=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 11 ----------- src/main/java/Input.java | 8 -------- src/main/java/Output.java | 6 ------ 3 files changed, 25 deletions(-) delete mode 100644 src/main/java/Calculator.java delete mode 100644 src/main/java/Input.java delete mode 100644 src/main/java/Output.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java deleted file mode 100644 index e57b515..0000000 --- a/src/main/java/Calculator.java +++ /dev/null @@ -1,11 +0,0 @@ -import java.util.Scanner; - - -public class Calculator { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String[] values = Input.readInput(scanner); - int result = Operator.calculate(values); - Output.printResult(result); - } -} \ No newline at end of file diff --git a/src/main/java/Input.java b/src/main/java/Input.java deleted file mode 100644 index 3813a1d..0000000 --- a/src/main/java/Input.java +++ /dev/null @@ -1,8 +0,0 @@ -import java.util.Scanner; - -public class Input { - public static String[] readInput(Scanner scanner) { - System.out.print("수식을 입력하세요: "); - return scanner.nextLine().split(" "); - } -} \ No newline at end of file diff --git a/src/main/java/Output.java b/src/main/java/Output.java deleted file mode 100644 index 4eb4f1c..0000000 --- a/src/main/java/Output.java +++ /dev/null @@ -1,6 +0,0 @@ -public class Output { - - public static void printResult(int result) { - System.out.println("결과: " + result); - } -} \ No newline at end of file From 9d312d6e7f8a582907398e397987d70a8a1df709 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 00:20:19 +0900 Subject: [PATCH 10/18] =?UTF-8?q?refactor(Calculator)=20:=20CalculatorCont?= =?UTF-8?q?roller=EC=97=90=20FormulaParser=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/controller/CalculatorController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index f0f535e..b7a8218 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -1,6 +1,7 @@ package calculator.controller; import calculator.model.Operator; +import calculator.util.FormulaParser; import calculator.view.InputView; import calculator.view.OutputView; @@ -8,15 +9,18 @@ public class CalculatorController { private final Operator operator; private final InputView inputView; private final OutputView outputView; + private final FormulaParser formulaParser; - public CalculatorController(Operator operator, InputView inputView, OutputView outputView) { + public CalculatorController(Operator operator, InputView inputView, OutputView outputView, FormulaParser formulaParser) { this.operator = operator; this.inputView = inputView; this.outputView = outputView; + this.formulaParser = formulaParser; } public void run() { - String[] values = inputView.formulaInput(); + String formula = inputView.formulaInput(); + String[] values = formulaParser.parse(formula); int result = operator.calculate(values); outputView.resultOutput(result); } From 16f98052728eb4392dddefd87f02fbf0719934ac Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:39:39 +0900 Subject: [PATCH 11/18] =?UTF-8?q?refactor(Calculator)=20:=20FormulaParser?= =?UTF-8?q?=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/CalculatorMain.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/CalculatorMain.java b/src/main/java/calculator/CalculatorMain.java index 2e4d777..6e74c0b 100644 --- a/src/main/java/calculator/CalculatorMain.java +++ b/src/main/java/calculator/CalculatorMain.java @@ -2,6 +2,7 @@ import calculator.controller.CalculatorController; import calculator.model.Operator; +import calculator.util.FormulaParser; import calculator.view.InputView; import calculator.view.OutputView; @@ -11,8 +12,9 @@ public static void main(String[] args) { Operator operator = new Operator(); InputView inputView = new InputView(); OutputView outputView = new OutputView(); + FormulaParser formulaParser = new FormulaParser(); - CalculatorController controller = new CalculatorController(operator, inputView, outputView); + CalculatorController controller = new CalculatorController(operator, inputView, outputView, formulaParser); controller.run(); } } \ No newline at end of file From 352bab3cfb65cc3cf3381922617033cad595a277 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:45:36 +0900 Subject: [PATCH 12/18] =?UTF-8?q?feat(Calculator)=20:=20=EC=88=98=EC=8B=9D?= =?UTF-8?q?=20=EB=B6=84=ED=95=A0=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit InputView에 있던 문자열을 나누는 역할 분할 --- src/main/java/calculator/util/FormulaParser.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/calculator/util/FormulaParser.java diff --git a/src/main/java/calculator/util/FormulaParser.java b/src/main/java/calculator/util/FormulaParser.java new file mode 100644 index 0000000..2c2cdb2 --- /dev/null +++ b/src/main/java/calculator/util/FormulaParser.java @@ -0,0 +1,7 @@ +package calculator.util; + +public class FormulaParser { + public String[] parse(String input) { + return input.split(" "); + } +} From 56aac5c54d80cbbf9dc4b2004a2154c8e09d97f8 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:50:29 +0900 Subject: [PATCH 13/18] =?UTF-8?q?refactor(Calculator)=20:=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=EC=9D=84=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 파싱 로직을 FormulaParser를 추가하여 책임 분리 --- src/main/java/calculator/view/InputView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index 84d94e5..d00ad63 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -3,9 +3,9 @@ import java.util.Scanner; public class InputView { - public String[] formulaInput() { + public String formulaInput() { Scanner scanner = new Scanner(System.in); System.out.print("수식을 입력하세요 : "); - return scanner.nextLine().split(" "); + return scanner.nextLine(); } } \ No newline at end of file From b32d31d897d5551b2bbdb3ef082ff50c65f879c3 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:51:32 +0900 Subject: [PATCH 14/18] =?UTF-8?q?refactor(Calculator)=20:=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=9C=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/Operations.java | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 src/main/java/calculator/model/Operations.java diff --git a/src/main/java/calculator/model/Operations.java b/src/main/java/calculator/model/Operations.java deleted file mode 100644 index 63f644b..0000000 --- a/src/main/java/calculator/model/Operations.java +++ /dev/null @@ -1,22 +0,0 @@ -package calculator.model; - -public class Operations { - public int addition(int a, int b) { - return a + b; - } - - public int subtract(int a, int b) { - return a - b; - } - - public int multiply(int a, int b) { - return a * b; - } - - public int divide(int a, int b) { - if (b == 0) { - throw new ArithmeticException("0으로 나눌 수 없습니다."); - } - return a / b; - } -} \ No newline at end of file From 7a44f528e03af6314a6c327cf1b7f4d1ad762336 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:52:36 +0900 Subject: [PATCH 15/18] =?UTF-8?q?refactor(Calculator)=20:=20Operations=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Operator.java | 27 ++++---------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/src/main/java/calculator/model/Operator.java b/src/main/java/calculator/model/Operator.java index f237207..d594cb1 100644 --- a/src/main/java/calculator/model/Operator.java +++ b/src/main/java/calculator/model/Operator.java @@ -1,34 +1,17 @@ package calculator.model; public class Operator { - private final Operations operations; - - public Operator() { - this.operations = new Operations(); - } public int calculate(String[] values) { int result = Integer.parseInt(values[0]); for (int i = 1; i < values.length; i += 2) { - OperatorType operatorType = OperatorType.fromString(values[i]); + String symbol = values[i]; int nextNumber = Integer.parseInt(values[i + 1]); - - switch (operatorType) { - case ADDITION: - result = operations.addition(result, nextNumber); - break; - case SUBTRACT: - result = operations.subtract(result, nextNumber); - break; - case MULTIPLY: - result = operations.multiply(result, nextNumber); - break; - case DIVIDE: - result = operations.divide(result, nextNumber); - break; - } + OperatorType operatorType = OperatorType.fromString(symbol); + result = operatorType.apply(result, nextNumber); } + return result; } -} \ No newline at end of file +} From 926d269e694f685e30f73017a348c3cd373770b0 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 01:54:50 +0900 Subject: [PATCH 16/18] =?UTF-8?q?refactor(Calculator)=20:=20OperatorType?= =?UTF-8?q?=20enum=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/OperatorType.java | 49 ++++++++++++++----- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/model/OperatorType.java b/src/main/java/calculator/model/OperatorType.java index 444a44e..d65731b 100644 --- a/src/main/java/calculator/model/OperatorType.java +++ b/src/main/java/calculator/model/OperatorType.java @@ -1,20 +1,45 @@ package calculator.model; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiFunction; + public enum OperatorType { - ADDITION, SUBTRACT, MULTIPLY, DIVIDE; + ADDITION("+", (a, b) -> a + b), + SUBTRACTION("-", (a, b) -> a - b), + MULTIPLICATION("*", (a, b) -> a * b), + DIVISION("/", (a, b) -> { + if (b == 0) { + throw new ArithmeticException("0으로 나눌 수 없습니다."); + } + return a / b; + }); + + private static final Map SYMBOL_MAP = new HashMap<>(); + + static { + for (OperatorType type : values()) { + SYMBOL_MAP.put(type.symbol, type); + } + } + + private final String symbol; + private final BiFunction operation; + + OperatorType(String symbol, BiFunction operation) { + this.symbol = symbol; + this.operation = operation; + } public static OperatorType fromString(String symbol) { - switch (symbol) { - case "+": - return ADDITION; - case "-": - return SUBTRACT; - case "*": - return MULTIPLY; - case "/": - return DIVIDE; - default: - throw new IllegalArgumentException("잘못된 연산자입니다."); + OperatorType type = SYMBOL_MAP.get(symbol); + if (type == null) { + throw new IllegalArgumentException("잘못된 연산자입니다."); } + return type; + } + + public int apply(int a, int b) { + return operation.apply(a, b); } } \ No newline at end of file From f8fe96c9fb28a3d3887cabc2b58a7e339152cf41 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 02:01:39 +0900 Subject: [PATCH 17/18] =?UTF-8?q?refactor(Calculator)=20:=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/controller/CalculatorController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index b7a8218..25b12cf 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -18,7 +18,7 @@ public CalculatorController(Operator operator, InputView inputView, OutputView o this.formulaParser = formulaParser; } - public void run() { + public void calculatorRun() { String formula = inputView.formulaInput(); String[] values = formulaParser.parse(formula); int result = operator.calculate(values); From 210461803818ccb1f77b692fa11399be11b671b9 Mon Sep 17 00:00:00 2001 From: kangs Date: Sat, 31 Aug 2024 02:01:51 +0900 Subject: [PATCH 18/18] =?UTF-8?q?refactor(Calculator)=20:=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=ED=98=B8=EC=B6=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/CalculatorMain.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/CalculatorMain.java b/src/main/java/calculator/CalculatorMain.java index 6e74c0b..3e1c1ba 100644 --- a/src/main/java/calculator/CalculatorMain.java +++ b/src/main/java/calculator/CalculatorMain.java @@ -15,6 +15,6 @@ public static void main(String[] args) { FormulaParser formulaParser = new FormulaParser(); CalculatorController controller = new CalculatorController(operator, inputView, outputView, formulaParser); - controller.run(); + controller.calculatorRun(); } } \ No newline at end of file