Skip to content

🟡 인터페이스와 다형성을 활용한 객체지향 계산기 구현 #32

@Duskafka

Description

@Duskafka

📝 개요

기존의 if-else 또는 switch 문으로 분기 처리하던 연산 로직을 인터페이스(Interface)와 다형성(Polymorphism)을 활용한 구조로 리팩토링합니다. 이를 통해 새로운 연산 기능이 추가되어도 기존 코드를 수정하지 않는 개방-폐쇄 원칙(OCP)을 직접 실천해 봅니다.

🎯 학습 목표

  • 인터페이스를 정의하고 이를 구현(implements)하는 클래스 작성법 익히기.
  • 다형성을 활용하여 실행 시점(Runtime)에 적절한 객체가 동작하게 만들기.
  • 객체지향 설계 원칙(SOLID) 중 하나인 OCP(Open-Closed Principle) 이해하기.

🏗️ 주요 요구사항

  1. Operation 인터페이스 생성
    • 모든 연산 클래스의 뼈대가 되는 인터페이스입니다.
    • double calculate(double n1, double n2) 메소드를 정의합니다.
  2. 연산별 구현 클래스 작성
    • Operation 인터페이스를 상속받아 실제 계산을 수행하는 클래스들을 만듭니다.
    • 예: AddOperation (더하기), SubOperation (빼기), MulOperation (곱하기), DivOperation (나누기) 등.
  3. 다형성을 활용한 로직 연결
    • 계산기 클래스에서 직접 산술 연산을 하지 않고, Operation 타입의 변수를 통해 calculate() 메소드를 호출합니다.
    • 사용자가 입력한 기호에 따라 어떤 구현체(AddOperation 등)를 할당할지만 결정합니다.

🚀 상세 구현 체크리스트

  • 인터페이스 추출: 모든 연산자가 공통으로 가지는 행위를 인터페이스로 분리했는가?
  • 조건문 최소화: 연산 실행부에서 if-else를 통한 직접 연산 로직이 사라졌는가?
  • 확장성 테스트: 새로운 클래스 ModOperation(나머지 연산)을 추가할 때, 기존의 다른 연산 클래스나 메인 연산 로직을 수정하지 않고 추가가 가능한가?

💡 Hint (Code Structure)

// 1. 인터페이스 정의
public interface Operation {
    double calculate(double n1, double n2);
}

// 2. 구현 클래스 예시
public class AddOperation implements Operation {
    @Override
    public double calculate(double n1, double n2) {
        return n1 + n2;
    }
}

// 3. 사용 예시 (다형성)
Operation op = new AddOperation(); 
System.out.println(op.calculate(10, 20)); // 인터페이스 타입으로 실행

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