Skip to content

Commit 4ecbf43

Browse files
committed
feat: 저장소 구현체, 메시지를 담을 클래스 구현
1 parent 490ce1d commit 4ecbf43

File tree

4 files changed

+66
-12
lines changed

4 files changed

+66
-12
lines changed

calculator/src/main/java/com/wonu606/calculator/CalculatorApp.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import com.wonu606.app.App;
44
import com.wonu606.calculator.storage.Persistence;
5+
import com.wonu606.calculator.storage.ResultStore;
56
import com.wonu606.calculator.strategy.Strategy;
67
import com.wonu606.io.Input;
78
import com.wonu606.io.Print;
9+
import com.wonu606.util.CalculatorMessage;
810
import java.io.IOException;
911
import java.util.ArrayList;
1012
import java.util.List;
@@ -13,7 +15,7 @@
1315
public class CalculatorApp implements App {
1416

1517
private final List<Strategy> strategies = new ArrayList<>();
16-
private final Persistence store;
18+
private final Persistence store = new ResultStore();
1719
Input input;
1820
Print printer;
1921

@@ -37,7 +39,7 @@ public void execute(Input input, Print printer) throws IOException {
3739
selectedStrategy.ifPresentOrElse(
3840
strategy -> strategy.execute(input, printer, store),
3941
() -> {
40-
throw new IllegalArgumentException("잘못된 입력입니다.");
42+
throw new IllegalArgumentException(CalculatorMessage.INVALID_INPUT.message);
4143
});
4244
}
4345
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.wonu606.calculator.storage;
2+
3+
import com.wonu606.calculator.model.CalculationResult;
4+
import com.wonu606.util.CalculatorMessage;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class ResultStore implements Persistence {
9+
10+
private final List<CalculationResult> store = new ArrayList<>();
11+
12+
@Override
13+
public void saveResult(CalculationResult calculationResult) {
14+
store.add(calculationResult);
15+
}
16+
17+
@Override
18+
public CalculationResult findResult(int sequence) {
19+
try {
20+
return store.get(sequence - 1);
21+
} catch (IndexOutOfBoundsException exception) {
22+
throw new IllegalArgumentException(CalculatorMessage.INVALID_ORDER.message);
23+
}
24+
}
25+
26+
@Override
27+
public List<CalculationResult> findAllResult() {
28+
return new ArrayList<>(store);
29+
}
30+
31+
@Override
32+
public void clear() {
33+
store.clear();
34+
}
35+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.wonu606.util;
2+
3+
public enum CalculatorMessage {
4+
INVALID_ORDER("잘못된 순번입니다."),
5+
INVALID_INPUT("잘못된 입력입니다.");
6+
7+
public final String message;
8+
9+
CalculatorMessage(String message) {
10+
this.message = message;
11+
}
12+
13+
@Override
14+
public String toString() {
15+
return message;
16+
}
17+
}

calculator/src/test/java/com/wonu606/storage/ResultStoreTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55

66
import com.wonu606.calculator.model.CalculationResult;
77
import com.wonu606.calculator.storage.Persistence;
8+
import com.wonu606.calculator.storage.ResultStore;
9+
import com.wonu606.util.CalculatorMessage;
810
import java.util.ArrayList;
911
import java.util.List;
10-
import org.junit.jupiter.api.BeforeEach;
1112
import org.junit.jupiter.api.DisplayName;
1213
import org.junit.jupiter.api.Test;
1314

1415
public class ResultStoreTest {
15-
1616
@Test
1717
@DisplayName("저장")
1818
void testSave() {
1919
// given
20-
Persistence store;
20+
Persistence store = new ResultStore();
2121

2222
// when
2323
CalculationResult calculationResult = new CalculationResult("2 + 2", 4.0d);
@@ -31,7 +31,7 @@ void testSave() {
3131
@DisplayName("순서로 결과 찾기")
3232
void testFind() {
3333
// given
34-
Persistence store;
34+
Persistence store = new ResultStore();
3535

3636
// when
3737
CalculationResult saveResult = new CalculationResult("5 + 10", 15.0d);
@@ -46,7 +46,7 @@ void testFind() {
4646
@DisplayName("1 미만의 수로 찾은 경우 예외 발생")
4747
void testFindNumberLessThan1() {
4848
// given
49-
Persistence store;
49+
Persistence store = new ResultStore();
5050

5151
// then
5252
CalculationResult saveResult = new CalculationResult("5 + 10", 15.0d);
@@ -55,14 +55,14 @@ void testFindNumberLessThan1() {
5555
// then
5656
assertThatThrownBy(() -> store.findResult(0))
5757
.isInstanceOf(IllegalArgumentException.class)
58-
.hasMessageContaining("잘못된 순번입니다.");
58+
.hasMessageContaining(CalculatorMessage.INVALID_ORDER.message);
5959
}
6060

6161
@Test
6262
@DisplayName("사이즈 초과의 수로 찾은 경우 예외 발생")
6363
void testFindNumberMoreThanSize() {
6464
// given
65-
Persistence store;
65+
Persistence store = new ResultStore();
6666

6767
// when
6868
CalculationResult saveResult = new CalculationResult("5 + 10", 15.0d);
@@ -71,14 +71,14 @@ void testFindNumberMoreThanSize() {
7171
// then
7272
assertThatThrownBy(() -> store.findResult(store.findAllResult().size() + 1))
7373
.isInstanceOf(IllegalArgumentException.class)
74-
.hasMessageContaining("잘못된 순번입니다.");
74+
.hasMessageContaining(CalculatorMessage.INVALID_ORDER.message);
7575
}
7676

7777
@Test
7878
@DisplayName("모두 찾기")
7979
void testFindAll() {
8080
// given
81-
Persistence store;
81+
Persistence store = new ResultStore();
8282

8383
// when
8484
List<CalculationResult> results = new ArrayList<>();
@@ -100,7 +100,7 @@ void testFindAll() {
100100
@DisplayName("클리어")
101101
void testClear() {
102102
// given
103-
Persistence store;
103+
Persistence store = new ResultStore();
104104

105105
// when
106106
store.saveResult(new CalculationResult("11 + 6", 17.0d));

0 commit comments

Comments
 (0)