본문 바로가기
개인 프로젝트/calculator-project

Generic을 도대체 왜 쓸까? <5>

by pon9 2024. 11. 15.

이번 프로젝트를 하면서 제일 힘든 순간이다.

일단 자바를 공부하기 이전엔 한번도 들어본 적 없는 기능인데다가, 왜 쓰는지는 알겠는데 내 코드에 적용하기 가장 힘들었다.

어설프게 대충 끼워넣다가는 유지보수할때 힘들 게 뻔했다. 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A0%9C%EB%84%A4%EB%A6%ADGenerics-%EA%B0%9C%EB%85%90-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0

 

☕ 자바 제네릭(Generics) 개념 & 문법 정복하기

제네릭 (Generics) 이란 자바에서 제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다. 자바에서 배

inpa.tistory.com

잘 정리된 글을 보고도 이해가 잘 되지 않는다. 계산기의 어느 부분에 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타입만 받도록 만들어서 어떻게 손을 대야 할지 모르겠다. 유연성을 높이려고 제네릭을 도입하는 것이 오히려 코드가 복잡해질 것 같다.

그냥 지금처럼 같은 타입으로 유지하고, 제네릭에 대한 것도 튜터님과 대화하면서 완벽히 이해했으니 다음 프로젝트부터 제네릭을 고려해서 만들어보도록 하자.

 

https://github.com/roqkfchqh/CalculatorApp