Scanner를 사용한 양의 정수 입력 (입력 검증 포함)- 사칙연산 기호 (
+,-,*,/) 입력 및 처리 - 잘못된 입력에 대한 오류 메시지 출력
exit입력 시 프로그램 종료- 반복 입력 및 연산 처리 (
while문 기반)
💡 주요 구현 포인트
- 숫자 및 연산자 입력값 검증 후 연산 처리
- 예외 상황 처리: 0으로 나눌 수 없음, 지원하지 않는 연산자 등
if,switch조건문을 통한 연산 분기 처리
- 연산 로직 분리 및 캡슐화 (
Calculator클래스) - 결과값 저장 기능 (
Queue컬렉션 사용) - 컬렉션 캡슐화를 위한 복사 객체 반환
- 저장된 결과 삭제 기능 (
poll) App클래스는Calculator인스턴스만 사용 (내부 필드 직접 접근 차단 → Getter/Setter 사용)- 예외 상황을
RuntimeException으로 처리
💡 주요 구현 포인트
App클래스는Calculator에만 의존하도록 구조 설계- 계산 결과는 내부 컬렉션에 저장
- 저장된 결과 중 가장 오래된 값부터 제거 가능 (FIFO 구조)
ArithmeticCalculator<T extends Number>제네릭 클래스 구현- 다양한 타입 연산 지원 (
Integer,Long,Float,Double) - 연산 타입 분리를 위한
Enum OperatorType설계 - 사용자 정의 예외 처리 (
CalculatorException,ErrorMessage) - 저장된 결과 중 평균 / 최댓값 출력 기능
- 특정 기준 이상의 결과만 필터링 출력 (
람다 & Stream활용) - 내부 필드 캡슐화 및 타입 안전성 고려
💡 주요 구현 포인트
calculate()메서드가 제네릭 기반으로 확장되어 다양한 수 타입 처리람다 표현식으로 조건 필터링 및 결과 출력 (List.stream().filter().collect()사용)Enum기반 연산자로 코드 가독성 및 유지보수성 향상