-
Notifications
You must be signed in to change notification settings - Fork 156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[4기 - 김재웅] 1~2주차 과제 : 계산기 구현 미션 제출합니다. #147
base: kju2405
Are you sure you want to change the base?
Changes from 13 commits
1c5c20b
31d64fe
d42a6d9
b36e927
c0c1a07
14789d6
ef5eeca
1bd816a
2b75683
8e7fc67
2324418
71917d0
15ffeda
50b581d
d31597e
057119f
8e49f93
1429b49
0f7a612
c22e1c6
4f44f1b
f8ef218
63e778c
8f97f36
eee0518
cb39427
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package org.example; | ||
|
||
import org.example.Calculate.*; | ||
import org.example.Input.Input; | ||
import org.example.Input.UserInput; | ||
import org.example.Output.Show; | ||
import org.example.Output.ShowText; | ||
import org.example.Repository.ExpressionRepository; | ||
import org.example.Repository.Repository; | ||
|
||
public class CalConfig { | ||
public Calculate calculate(){ | ||
return new CalculateImpl(new CalOrderImpl()); | ||
} | ||
public Repository repository(){ | ||
return new ExpressionRepository(); | ||
} | ||
public Input input(){ | ||
return new UserInput(); | ||
} | ||
public Show show(){ | ||
return new ShowText(); | ||
} | ||
public PreProcess preProcess() { | ||
return new PreProcessImpl(); | ||
} | ||
} |
This file was deleted.
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,9 @@ | ||||||||||
package org.example.Calculate; | ||||||||||
|
||||||||||
import java.util.Stack; | ||||||||||
|
||||||||||
public interface CalOrder { | ||||||||||
void calMultiplyDivide(); | ||||||||||
int calPlusMinus(); | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
메소드 이름이 길어지더라도 명시적으로 작성해주세요! |
||||||||||
void setStack(Stack<String> expressionStack); | ||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,14 @@ | ||
package org.example; | ||
package org.example.Calculate; | ||
|
||
import java.util.Stack; | ||
|
||
public class Calculate implements CalOrder{ | ||
private String expression; | ||
public class CalOrderImpl implements CalOrder { | ||
private int result = 0; | ||
Stack<String> expressionStack = new Stack<>(); | ||
ExpressionRepository repository = new ExpressionRepository(); | ||
int result = 0; | ||
|
||
public Calculate(String expression) { | ||
this.expression = expression; | ||
String[] expressionArr = expression.split(" "); | ||
for (String inputVal : expressionArr) { | ||
expressionStack.add(inputVal); | ||
} | ||
} | ||
|
||
public void calculate(){ | ||
calPriorityFirst(); | ||
calPrioritySecond(); | ||
} | ||
|
||
@Override | ||
public void calPriorityFirst() { | ||
for (int i = 1; i < expressionStack.size(); i+=2) { | ||
public void calMultiplyDivide() { | ||
for (int i = 1; i < expressionStack.size(); i += 2) { | ||
if (expressionStack.get(i).equals("*")) { | ||
multiply(i); | ||
i -= 2; | ||
|
@@ -35,7 +20,7 @@ public void calPriorityFirst() { | |
} | ||
|
||
@Override | ||
public void calPrioritySecond() { | ||
public int calPlusMinus() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 메서드를 어떻게 테스트 할 수 있을까? 라는 질문을 하면서 리팩토링을 해보시면 좋을 것 같아요. |
||
result = Integer.parseInt(expressionStack.get(0)); | ||
for (int i = 1; i < expressionStack.size(); i += 2) { | ||
if (expressionStack.get(i).equals("+")) { | ||
|
@@ -44,11 +29,15 @@ public void calPrioritySecond() { | |
result -= Integer.parseInt(expressionStack.get(i + 1)); | ||
} | ||
} | ||
System.out.println(result); | ||
repository.save(expression,result); | ||
return result; | ||
} | ||
|
||
@Override | ||
public void setStack(Stack<String> expressionStack) { | ||
this.expressionStack = expressionStack; | ||
} | ||
|
||
public void multiply(int idx){ | ||
public void multiply(int idx) { | ||
result = Integer.parseInt(expressionStack.get(idx - 1)) * Integer.parseInt(expressionStack.get(idx + 1)); | ||
expressionStack.add(idx - 1, String.valueOf(result)); | ||
expressionStack.remove(idx); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.example.Calculate; | ||
|
||
import java.util.Stack; | ||
|
||
public interface Calculate { | ||
int calculate(Stack<String> expressionStack); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.example.Calculate; | ||
|
||
import java.util.Stack; | ||
|
||
public class CalculateImpl implements Calculate { | ||
CalOrder calOrder; | ||
|
||
public CalculateImpl(CalOrder calOrder) { | ||
this.calOrder = calOrder; | ||
} | ||
|
||
public int calculate(Stack<String> expressionStack) { | ||
calOrder.setStack(expressionStack); | ||
calOrder.calMultiplyDivide(); | ||
return calOrder.calPlusMinus(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.example.Calculate; | ||
|
||
import java.util.Stack; | ||
|
||
public interface PreProcess { | ||
Stack<String> expressionToStack(String expression); | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,18 @@ | ||||||||||||
package org.example.Calculate; | ||||||||||||
|
||||||||||||
import java.util.Stack; | ||||||||||||
|
||||||||||||
public class PreProcessImpl implements PreProcess{ | ||||||||||||
private String expression; | ||||||||||||
Stack<String> expressionStack = new Stack<>(); | ||||||||||||
@Override | ||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||
public Stack<String> expressionToStack(String expression) { | ||||||||||||
this.expression = expression; | ||||||||||||
String[] expressionArr = expression.split(" "); | ||||||||||||
expressionStack.clear(); | ||||||||||||
for (String inputVal : expressionArr) { | ||||||||||||
expressionStack.add(inputVal); | ||||||||||||
} | ||||||||||||
return expressionStack; | ||||||||||||
} | ||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 너무 요구사항과 강하게 결합 되어 있는 것 같아서, 재사용성을 고려해보는 것도 좋을 거 같아요 :) |
||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package org.example.Input; | ||
|
||
public interface Input { | ||
int inputChoice(); | ||
String inputExpression(); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.example.Input; | ||
|
||
import java.util.Scanner; | ||
|
||
public class UserInput implements Input { | ||
Scanner scanner = new Scanner(System.in); | ||
@Override | ||
public int inputChoice() { | ||
return scanner.nextInt(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. inputChoice()라는 메서드명과 실제로 하고 있는 일이 조금 달라보여요. |
||
} | ||
|
||
@Override | ||
public String inputExpression() { | ||
scanner.nextLine(); | ||
return scanner.nextLine(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,39 @@ | ||
package org.example; | ||
|
||
import org.example.Calculate.Calculate; | ||
import org.example.Calculate.PreProcess; | ||
import org.example.Input.Input; | ||
import org.example.Output.Show; | ||
import org.example.Repository.Repository; | ||
|
||
import java.util.List; | ||
import java.util.Scanner; | ||
import java.util.Stack; | ||
|
||
public class Main { | ||
private static int choice; | ||
public static void main(String[] args) { | ||
|
||
int choice = 0; | ||
CalConfig calConfig = new CalConfig(); | ||
Calculate calculator = calConfig.calculate(); | ||
Repository repository = calConfig.repository(); | ||
Input input = calConfig.input(); | ||
Show show = calConfig.show(); | ||
PreProcess preProcess = calConfig.preProcess(); | ||
|
||
while (true) { | ||
choice = getChoice(); | ||
show.showMenu(); | ||
choice = input.inputChoice(); | ||
System.out.println(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이것도 출력을 담당하는 객체에서 수행하면 좋을 것 같아요! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 멘토님, 리뷰 감사드립니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. System.out.println();으로 하드코딩 되어 있는 부분입니다 :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아하 감사합니다🙇♂️ |
||
if (choice == 1) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. choice 1이 어떤 동작인지 어떻게 알 수 있을까요? |
||
new UserInterfaceImpl().showRecord(); | ||
List<String> records = repository.getRecords(); | ||
show.showRecords(records); | ||
} else { | ||
String expression = typeExpression(); | ||
new Calculate(expression).calculate(); | ||
String expression = input.inputExpression(); | ||
Stack<String> expressionStack = preProcess.expressionToStack(expression); | ||
int result = calculator.calculate(expressionStack); | ||
repository.save(expression,result); | ||
show.showResult(result); | ||
} | ||
System.out.println(); | ||
} | ||
} | ||
|
||
public static int getChoice() { | ||
Scanner scanner = new Scanner(System.in); | ||
|
||
System.out.println("1. 조회\n2. 계산\n"); | ||
System.out.print("선택 : "); | ||
return scanner.nextInt(); | ||
} | ||
|
||
public static String typeExpression() { | ||
Scanner scanner = new Scanner(System.in); | ||
return scanner.nextLine(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package org.example.Output; | ||
|
||
import java.util.List; | ||
|
||
public interface Show { | ||
void showMenu(); | ||
void showRecords(List<String> records); | ||
void showResult(int result); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package org.example.Output; | ||
|
||
import java.util.List; | ||
|
||
public class ShowText implements Show{ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 클래스 이름은 명사로 만들어주세요 |
||
@Override | ||
public void showMenu() { | ||
System.out.println("1. 조회\n2. 계산\n"); | ||
System.out.print("선택 : "); | ||
} | ||
|
||
@Override | ||
public void showRecords(List<String> records) { | ||
records.forEach(System.out::println); | ||
} | ||
|
||
@Override | ||
public void showResult(int result) { | ||
System.out.println(result); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
package org.example; | ||
package org.example.Repository; | ||
|
||
import java.util.List; | ||
|
||
public interface Repository { | ||
void save(String expression, int result); | ||
List<String> getRecord(); | ||
List<String> getRecords(); | ||
} |
This file was deleted.
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Config를 통해 객체를 생성하면 어떤 장점이 있나요?