import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CalculatorApp {
Calculator calc = new Calculator();
Parser parser = new Parser();
//Calculator class 에 사용되는 List 생성
List<String> numbers = new ArrayList<>();
public void start(){
Scanner calculation = new Scanner(System.in);
while(true){
try{
System.out.println("첫 번째 숫자를 입력하고 엔터");
String a = calculation.nextLine();
//parser 로 보내서 유효성 검사
double firstInput = Double.parseDouble(parser.parseFirstNum(a));
//BadInputException 에러가 안 떳으면 List 에 값 저장
numbers.add(String.valueOf(firstInput));
//연속 계산 while 문으로 처리
while(true){
System.out.println("연산자(+,-,*,/)를 입력하고 엔터(또는 c:값 초기화, e:나가기, h: 히스토리)");
String operator = calculation.nextLine();
//사용자가 e 입력 시 시스템 종료
if (operator.equalsIgnoreCase("e")) {
System.exit(0);
//사용자가 c 입력 시 numbers 초기화, 첫 번째 숫자부터 재시작
} else if (operator.equalsIgnoreCase("c")) {
numbers.clear();
break;
}
String operatorInput = parser.parseOperator(operator);
numbers.add(operatorInput);
System.out.println("다음 숫자를 입력하고 엔터");
String b = calculation.nextLine();
double secondInput = Double.parseDouble(parser.parseSecondNum(b));
numbers.add(String.valueOf(secondInput));
calc.calculate(numbers);
double result = calc.calculate(numbers);
System.out.println("계산결과: " + result);
}
}catch(BadInputException e){
//에러 발생 시 List 초기화
System.out.println(e.getMessage());
numbers.clear();
}
}
}
}
지금 내 코드에서는, parser로 값을 보내서 유효성 검사를 한 후 numbers.add로 값을 추가하는 과정이 여러 번 반복되고 있다.
이러한 부분을 인터페이스나 메서드로 교체하면 유지보수가 용이해지지 않을까 하며 둘의 차이점에 대해 찾아보았다.
1. 인터페이스
인터페이스는, 여러 클래스에서 공통으로 구현해야 하는 행동(메서드)을 정의하고, 이를 통해 클래스 간의 일관된 동작을 강제하는 용도로 사용된다. 쉽게 말해 클래스 전체의 움직임을 조정하거나 통제하는 데 유리하다.
2. 메서드
메서드는 클래스 내부에서 반복되는 로직을 줄이고, 가독성과 유지보수성을 높이기 위해 사용된다.
오! 이제 완벽히 이해됐다. 지금 내 코드에서는 "클래스 내부에서 반복되는 로직" 만 있을 뿐이니까, 메서드를 사용하는 것이 좋다.
계산기를 만들면서 자바 실력이 눈에 띄게 느는 것 같다. 아직 혼자 전체 구조를 짜라고 하면 못 짜겠지만.. 있는 코드에 덧붙이는 건 역시 재밌다
근데, 고민했으나 실행에 옮기진 않았다. 머쓱타드..... calculatorApp은 유지보수 할 일도 없고, 연관성이 딱히 없는 두 개의 기능을 어거지로 합치면 코드가 애매해질 것 같다.
어쨌든 인터페이스에 대해 완벽히 이해했으니 얻은 게 있다.
'개인 프로젝트 > calculator-project' 카테고리의 다른 글
트러블슈팅: 왜 저장이 두번 되니? <7> (8) | 2024.11.15 |
---|---|
Generic을 도대체 왜 쓸까? <5> (1) | 2024.11.15 |
Parser.java의 중요성을 깨달음 <4> (0) | 2024.11.15 |