Skip to content

Commit 7f53d44

Browse files
committed
메서드 및 클래스 분리
1 parent 6f78571 commit 7f53d44

File tree

8 files changed

+181
-98
lines changed

8 files changed

+181
-98
lines changed

build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ repositories {
1010
}
1111

1212
dependencies {
13+
compileOnly 'org.projectlombok:lombok:1.18.22'
14+
annotationProcessor 'org.projectlombok:lombok:1.18.22'
15+
1316
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
1417
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
1518
}
1619

20+
1721
test {
1822
useJUnitPlatform()
19-
}
23+
}
Lines changed: 2 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,8 @@
11
package me.kimihiqq;
22

3-
import java.util.*;
4-
import java.util.stream.Collectors;
5-
63
public class Application {
7-
8-
private Scanner scanner = new Scanner(System.in);
9-
private Map<Integer, String> history = new HashMap<>();
10-
private int id = 0;
11-
12-
public void menu() {
13-
while (true) {
14-
System.out.println("1. 조회");
15-
System.out.println("2. 계산");
16-
System.out.println();
17-
System.out.print("선택 : ");
18-
String selectPage = scanner.nextLine();
19-
20-
switch (selectPage) {
21-
case "1" -> list();
22-
case "2" -> calculate();
23-
}
24-
}
25-
}
26-
27-
public void calculate() {
28-
String formula = scanner.nextLine();
29-
30-
if (!formula.matches("^(\\d\\s[+\\-*/]\\s)+\\d$")) {
31-
System.out.println("Invalid formula!");
32-
return;
33-
}
34-
35-
String[] arr = formula.split(" ");
36-
List<String> terms = Arrays.stream(arr).collect(Collectors.toList());
37-
38-
int i = 0;
39-
while (i < terms.size()) {
40-
if (terms.get(i).equals("*") || terms.get(i).equals("/")) {
41-
long leftHandSide = Long.parseLong(terms.get(i - 1));
42-
long rightHandSide = Long.parseLong(terms.get(i + 1));
43-
long result = 0;
44-
if (terms.get(i).equals("*")) {
45-
result = leftHandSide * rightHandSide;
46-
} else if (terms.get(i).equals("/")) {
47-
result = leftHandSide / rightHandSide;
48-
}
49-
for (int j = 0; j < 3; j++) {
50-
terms.remove(i - 1);
51-
}
52-
terms.add(i - 1, String.valueOf(result));
53-
} else {
54-
i++;
55-
}
56-
}
57-
58-
i = 0;
59-
while (i < terms.size()) {
60-
if (terms.get(i).equals("+") || terms.get(i).equals("-")) {
61-
long leftHandSide = Long.parseLong(terms.get(i - 1));
62-
long rightHandSide = Long.parseLong(terms.get(i + 1));
63-
long result = 0;
64-
if (terms.get(i).equals("+")) {
65-
result = leftHandSide + rightHandSide;
66-
} else if (terms.get(i).equals("-")) {
67-
result = leftHandSide - rightHandSide;
68-
}
69-
for (int j = 0; j < 3; j++) {
70-
terms.remove(i - 1);
71-
}
72-
terms.add(i - 1, String.valueOf(result));
73-
} else {
74-
i++;
75-
}
76-
}
77-
78-
System.out.println(terms.get(0));
79-
StringBuffer sb = new StringBuffer();
80-
String result = sb.append(formula)
81-
.append(" = ")
82-
.append(terms.get(0))
83-
.toString();
84-
storeHistory(result);
85-
System.out.println();
86-
}
87-
88-
private void storeHistory(String result) {
89-
history.put(id++, result);
90-
}
91-
92-
public void list() {
93-
for (Map.Entry<Integer, String> entry : history.entrySet()) {
94-
System.out.println(entry.getValue());
95-
}
96-
System.out.println();
97-
}
98-
994
public static void main(String[] args) {
100-
Application application = new Application();
101-
application.menu();
5+
Console console = new Console();
6+
new Calculator(console, console).run();
1027
}
1038
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package me.kimihiqq;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import me.kimihiqq.io.Input;
5+
import me.kimihiqq.io.Output;
6+
import me.kimihiqq.model.History;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
@RequiredArgsConstructor
12+
public class Calculator implements Runnable {
13+
14+
private final Input scanner;
15+
private final Output printer;
16+
private final History history = new History();
17+
18+
public void run() {
19+
20+
while (true) {
21+
printer.println("1. 조회\n2. 계산\n");
22+
String selectPage = scanner.nextLine("선택 : ");
23+
24+
switch (selectPage) {
25+
case "1" -> list();
26+
case "2" -> calculate();
27+
}
28+
}
29+
}
30+
31+
public void calculate() {
32+
String formula = scanner.nextLine();
33+
if (!Pretreatment.validateFormula(formula)) return;
34+
List<String> terms = Pretreatment.parseFormula(formula);
35+
36+
int i = 0;
37+
while (i < terms.size()) {
38+
if (terms.get(i).equals("*") || terms.get(i).equals("/")) {
39+
long leftHandSide = Long.parseLong(terms.get(i - 1));
40+
long rightHandSide = Long.parseLong(terms.get(i + 1));
41+
long result = 0;
42+
if (terms.get(i).equals("*")) {
43+
result = leftHandSide * rightHandSide;
44+
} else if (terms.get(i).equals("/")) {
45+
result = leftHandSide / rightHandSide;
46+
}
47+
for (int j = 0; j < 3; j++) {
48+
terms.remove(i - 1);
49+
}
50+
terms.add(i - 1, String.valueOf(result));
51+
} else {
52+
i++;
53+
}
54+
}
55+
56+
i = 0;
57+
while (i < terms.size()) {
58+
if (terms.get(i).equals("+") || terms.get(i).equals("-")) {
59+
long leftHandSide = Long.parseLong(terms.get(i - 1));
60+
long rightHandSide = Long.parseLong(terms.get(i + 1));
61+
long result = 0;
62+
if (terms.get(i).equals("+")) {
63+
result = leftHandSide + rightHandSide;
64+
} else if (terms.get(i).equals("-")) {
65+
result = leftHandSide - rightHandSide;
66+
}
67+
for (int j = 0; j < 3; j++) {
68+
terms.remove(i - 1);
69+
}
70+
terms.add(i - 1, String.valueOf(result));
71+
} else {
72+
i++;
73+
}
74+
}
75+
76+
printer.println(terms.get(0));
77+
StringBuffer sb = new StringBuffer();
78+
String result = sb.append(formula)
79+
.append(" = ")
80+
.append(terms.get(0))
81+
.toString();
82+
history.add(result);
83+
84+
}
85+
86+
public void list() {
87+
Map<Integer, String> allHistory = history.getAll();
88+
for (Map.Entry<Integer, String> entry : allHistory.entrySet()) {
89+
printer.println(entry.getValue());
90+
}
91+
printer.println();
92+
}
93+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package me.kimihiqq;
2+
3+
import me.kimihiqq.io.Input;
4+
import me.kimihiqq.io.Output;
5+
6+
import java.util.Scanner;
7+
8+
public class Console implements Input, Output {
9+
private final Scanner scanner = new Scanner(System.in);
10+
@Override
11+
public String nextLine(){
12+
return scanner.nextLine();
13+
}
14+
@Override
15+
public String nextLine(String prompt){
16+
System.out.print(prompt);
17+
return scanner.nextLine();
18+
}
19+
20+
@Override
21+
public void println() {
22+
System.out.println();
23+
}
24+
@Override
25+
public void println(String prompt) {
26+
System.out.println(prompt);
27+
}
28+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package me.kimihiqq;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.stream.Collectors;
6+
7+
public class Pretreatment {
8+
9+
public static List<String> parseFormula(String formula) {
10+
String[] arr = formula.split(" ");
11+
return Arrays.stream(arr).collect(Collectors.toList());
12+
}
13+
14+
public static boolean validateFormula(String formula) {
15+
if (!formula.matches("^(\\d\\s[+\\-*/]\\s)+\\d$")) {
16+
System.out.println("Invalid formula!");
17+
return false;
18+
}
19+
return true;
20+
}
21+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package me.kimihiqq.io;
2+
3+
public interface Input {
4+
public String nextLine();
5+
6+
public String nextLine(String prompt);
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package me.kimihiqq.io;
2+
3+
public interface Output {
4+
void println();
5+
6+
void println(String prompt);
7+
8+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.kimihiqq.model;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class History {
7+
private final Map<Integer, String> history = new HashMap<>();
8+
private int id = 0;
9+
10+
public void add(String result) {
11+
history.put(id++, result);
12+
}
13+
14+
public Map<Integer, String> getAll() {
15+
return history;
16+
}
17+
}

0 commit comments

Comments
 (0)