계산기 과제

정채림·2026년 1월 9일

트러블슈팅

1. 제너릭 메서드 활용

public void searchLog (T param) {

	ArrayList<T> result = calcLog.stream()

	.filter(num -> num > param)

	.toList();


}
  • T끼리는 비교연산자를 사용할 수 없다는 오류가 떴다.
  • 찾아보니 class에서 Comparable<T>로 extends 해주고 compareTo()를 이용해야 한다고 한다.
//기준값보다 큰 결과값을 조회하는 함수
    public void searchLog (T param) {
        List<T> result = calcLog.stream()
                .filter(num -> num.compareTo(param) > 0)
                .toList();
        System.out.println("result: " + result);
    }

2. ENUM 활용

public enum OperatorType {
        //각 연산기호 매핑
        ADD("+"), SUBTRACT("-"), MULTIPLY("*"), DIVISION("/");
        private final String symbol; //final field
        OperatorType(String symbol){ this.symbol = symbol; } //생성자
        public String getSymbol () {
            return symbol;
        }
    }
  • enum 상수를 생성하고 각 연산자에 매핑을 해줬다.
  • 하지만 입력받는 것은 사칙연산 기호이다. 넘겨받은 사칙연산 기호를 enum 상수로 변환해야하는 함수가 필요해졌다.
 public static OperatorType fromSymbol(String op){
            for(OperatorType type : values()){
                if(type.getSymbol().equals(op)){
                    return type;
                }
            }
            throw new IllegalArgumentException("지원하지 않는 연산자입니다.");
        }
  • 그래서 values을 순회하면서 입력된 연산기호에 맞는 enum값을 찾아주는 함수를 만들었다.
  • values()는 자바가 Enum 클래스에 자동으로 만들어주는 메서드로 이 안에는 내가 위에 선언한 ADD, SUB...가 들어있다.
  • 향상된 for문으로 위에 만든 getter인 getSymbol함수로 반환받은 operator type을 입력받은 연산자와 비교한다.

0개의 댓글