Skip to content

🔵 Enum을 활용한 계산기 연산 로직 리팩토링 #31

@Duskafka

Description

@Duskafka

📝 개요

현재 계산기 코드에 흩어져 있는 if-else 또는 switch-case 기반의 연산자 판별 로직을 제거하고, 자바의 Enum(열거형)을 활용하여 데이터와 로직이 결합된 객체지향적인 코드로 리팩토링합니다.

🎯 학습 목표

  • 자바 Enum의 고급 활용법(상수별 메소드 구현) 익히기
  • 조건문을 제거하여 코드의 가독성과 유지보수성 높이기
  • 데이터(기호)와 행위(계산 로직)를 하나의 객체로 묶는 법 배우기

🏗️ 주요 요구사항

  1. Operator 열거형 구현
    • 사칙연산(+, , , /)을 상수로 정의합니다.
    • 각 상수는 자신에 해당하는 기호(String)를 필드로 가져야 합니다.
    • 각 상수는 두 숫자를 받아 연산 결과를 반환하는 계산 로직을 직접 포함해야 합니다.
  2. 조건문 제거 (Refactoring)
    • 메인 로직(또는 계산 클래스)에서 연산 기호를 비교하기 위해 사용했던 if 또는 switch 문을 삭제합니다.
    • 대신, 입력받은 문자열을 Operator Enum 상수로 변환한 뒤, 해당 상수의 메소드를 호출하여 결과를 얻습니다.
  3. 연산자 조회 로직 구현
    • 사용자가 입력한 문자열(예: "*")에 해당하는 Operator 상수를 찾아 반환하는 정적 메소드(예: fromSymbol)를 구현합니다.

🚀 상세 구현 체크리스트

  • 데이터와 로직의 결합: Enum 상수가 기호(+)와 연산 행위(add)를 모두 가지고 있는가?
  • 추상 메소드 활용: Enum 내부에 추상 메소드를 선언하고 각 상수가 이를 오버라이딩하여 구현했는가?
  • 확장성: 새로운 연산자(예: %)를 추가할 때 기존 코드를 수정하지 않고 Enum에 상수 하나만 추가하면 되는 구조인가?

💡 Hint (Code Structure)

public enum Operator {
    PLUS("+") {
        @Override
        public double apply(double x, double y) { return x + y; }
    },
    // 나머지 연산자 구현...
    
    private final String symbol;
    Operator(String symbol) { this.symbol = symbol; }

    public abstract double apply(double x, double y);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions