Skip to content

Commit f57592e

Browse files
committed
feat: Converter 인터페이스와 StringToIntegerConverter 객체 구현
1 parent 85d8868 commit f57592e

File tree

5 files changed

+67
-1
lines changed

5 files changed

+67
-1
lines changed

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.wonu606.calculator;
22

33
import com.wonu606.app.App;
4+
import com.wonu606.calculator.converter.Converter;
5+
import com.wonu606.calculator.converter.StringToIntegerConverter;
46
import com.wonu606.calculator.storage.Persistence;
57
import com.wonu606.calculator.storage.ResultStore;
68
import com.wonu606.calculator.strategy.Strategy;
@@ -31,8 +33,9 @@ public void execute(Input input, Print printer) throws IOException {
3133
this.input = input;
3234
this.printer = printer;
3335

36+
Converter<String, Integer> stringIntegerConverter = new StringToIntegerConverter();
3437
while (true) {
35-
int selection = Integer.parseInt(input.getInput());
38+
int selection = stringIntegerConverter.convert(input.getInput());
3639

3740
Optional<Strategy> selectedStrategy =
3841
Optional.ofNullable(strategies.get(selection - 1));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.wonu606.calculator.converter;
2+
3+
public interface Converter<T, R> {
4+
5+
R convert(T input);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.wonu606.calculator.converter;
2+
3+
import com.wonu606.util.Message;
4+
5+
public class StringToIntegerConverter implements Converter<String, Integer> {
6+
7+
@Override
8+
public Integer convert(String input) {
9+
Integer result = null;
10+
try {
11+
result = Integer.parseInt(input);
12+
} catch (NumberFormatException exception) {
13+
throw new IllegalArgumentException(Message.INVALID_INPUT);
14+
}
15+
return result;
16+
}
17+
}

calculator/src/main/java/com/wonu606/util/Message.java

+1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
public abstract class Message {
44
public static final String INVALID_ORDER = "잘못된 순번입니다.";
55
public static final String INVALID_NUMBER = "잘못된 번호입니다.";
6+
public static final String INVALID_INPUT = "잘못된 입력입니다.";
67
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.wonu606.converter;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.assertThatCode;
5+
6+
import com.wonu606.calculator.converter.Converter;
7+
import com.wonu606.calculator.converter.StringToIntegerConverter;
8+
import com.wonu606.util.Message;
9+
import org.junit.jupiter.api.Test;
10+
11+
public class StringIntegerConverterTest {
12+
13+
Converter<String, Integer> converter = new StringToIntegerConverter();
14+
15+
@Test
16+
void testIfNumber() {
17+
String input = "123123";
18+
19+
assertThat(converter.convert(input)).isEqualTo(123123);
20+
}
21+
22+
@Test
23+
void testOverflow() {
24+
String input = "2147483648";
25+
26+
assertThatCode(() -> converter.convert(input))
27+
.isInstanceOf(IllegalArgumentException.class)
28+
.hasMessageContaining(Message.INVALID_INPUT);
29+
}
30+
31+
@Test
32+
void testIfNotNumber() {
33+
String input = "111ㅁ";
34+
35+
assertThatCode(() -> converter.convert(input))
36+
.isInstanceOf(IllegalArgumentException.class)
37+
.hasMessageContaining(Message.INVALID_INPUT);
38+
}
39+
}

0 commit comments

Comments
 (0)