level3 계산기 과제 트러블슈팅

SIHA·2025년 1월 10일

처음 제네릭(Generic)을 적용하려고 했을 때, 오버로딩 방식과 혼동하여 초기 설계와 구현 과정에서 어려움을 겪었다.

특히, 숫자를 입력받아 계산할 때 다음과 같은 잘못된 접근을 시도했다:

Calculator 클래스에서 입력받은 숫자의 타입을 검사하여, 각 타입(Double, Integer 등)에 맞게 객체를 생성하거나,
마치 오버로딩처럼 처리할 수 있을 것이라고 착각했다.
그러나 이는 전혀 잘못된 접근 방식이었다. 제네릭은 컴파일 시점에서 타입 안정성을 보장하지만, 런타임에 타입 검사를 통해 동적인 처리를 지원하지 않는다.


우선 파일 구조는 다음과 같다.

calculator/
|-- Main.java
|-- Calculator.java
|-- ArithmeticCalculator.java
|-- Operator.enum

이 과정에서, level2의 Calculator 클래스를 두 가지 역할로 분리했다:

Calculator: 입력 문자열을 파싱하고, ArithmeticCalculator를 호출하며, 계산 결과를 관리한다.
ArithmeticCalculator: 사칙연산을 수행하며, 제네릭(T extends Number)을 활용해 다양한 숫자 타입을 처리한다.

  1. Main
  • 사용자 입력을 처리하고, 입력 문자열을 Calculator로 전달한다.
  1. Calculator
  • 입력 문자열을 파싱하여 숫자와 연산자를 추출한다.
  • ArithmeticCalculator를 호출해 계산을 수행하며, 결과를 저장한다.
  1. ArithmeticCalculator
  • 연산자(Enum)와 숫자(Generic)를 기반으로 사칙연산을 수행하고 결과를 반환한다.

ArithmeticCalculator 내에서 double로 계산하고, 필요한 경우, integer로 변환하였다.

profile
뭐라도 해보자

0개의 댓글