이번 프로젝트를 하면서 제일 힘든 순간이다.
일단 자바를 공부하기 이전엔 한번도 들어본 적 없는 기능인데다가, 왜 쓰는지는 알겠는데 내 코드에 적용하기 가장 힘들었다.
어설프게 대충 끼워넣다가는 유지보수할때 힘들 게 뻔했다.
잘 정리된 글을 보고도 이해가 잘 되지 않는다. 계산기의 어느 부분에 generic을 써야할까?
import java.util.LinkedList;
import java.util.List;
public class History <N extends Number, R> {
private N firstNumberValue;
private N secondNumberValue;
private String operator;
private R result;
private int idNum = 1;
private List<String> history;
public History (N firstNumber, N secondNumber, String operator, R result){
this.firstNumberValue = firstNumber;
this.secondNumberValue = secondNumber;
this.operator = operator;
this.result = result;
this.history = new LinkedList<>();
}
public void saveHistory(){
history.add(idNum + ") " + firstNumberValue + operator + secondNumberValue + "=");
history.add((String) result);
idNum++;
}
}
일단 history를 저장하는 History.java에 적용해보긴 했는데..잘 모르겠다. . . 모두 double 타입인데 어떻게 쓰지??..
혼자 고민하니까 답이 안 나와서 튜터님께 찾아간 결과, 사용자로부터 받는 모든 숫자 타입을 generic을 사용해서 연습하라는 팁을 주셨다. 그렇게 하니 확 와닿는다.
지금 내 계산기는 값을 double로만 처리해서, int로도 해결되는 계산에서는 메모리 손해를 보고있다. 만약 실무에서 이것의 몇천만배 정도의 데이터를 이런식으로 처리한다면 제네릭을 사용하는 게 꽤 유의미한 결과를 불러올 수 있을 것 같다.
그럼 이걸 어떻게 처리할것이냐......상당히 골치아프다.
지금 numbers List를 String타입만 받도록 만들어서 어떻게 손을 대야 할지 모르겠다. 유연성을 높이려고 제네릭을 도입하는 것이 오히려 코드가 복잡해질 것 같다.
그냥 지금처럼 같은 타입으로 유지하고, 제네릭에 대한 것도 튜터님과 대화하면서 완벽히 이해했으니 다음 프로젝트부터 제네릭을 고려해서 만들어보도록 하자.
'개인 프로젝트 > calculator-project' 카테고리의 다른 글
Interface? or Method? <6> (1) | 2024.11.15 |
---|---|
Parser.java의 중요성을 깨달음 <4> (0) | 2024.11.15 |
트러블슈팅: Reducing a Stream <3> (0) | 2024.11.15 |