본문 바로가기
개인 공부용 프로젝트/calculator

추상 클래스를 도입해보자 <10>

by pon9 2024. 11. 19.

예전에, 계산기를 업그레이드 하기 전에 초반에는 구조가 이렇게 되어있었다.

주목할 곳은 abstract operation이다. 당시의 나는 "왜 사칙연산밖에 못 하는데 추상 클래스를 4개나 나눠야 하는 거지?" 라고 생각했었고, 나눠져 있던 5개의 클래스를 하나의 enum으로 통합하고 뿌듯해했다.

하지만 내 java에 대한 시야가 확장되면서 이젠 enum과 추상 클래스를 같이 사용하며

'두 개의 연산자를 받아서' '다양한 복잡한 연산을 수행하는 기능' 을 '같은 구조로 손쉽게' 추가하는 기능을 도입해보려고 한다.

 

그럼 코딩을 하기 전, 이들이 얼마나 다른지 짚고 넘어가보자.


1. enum만 사용한 operation

: 열거형으로 단순하고 직관적이다. 한 파일 안에 모두 담긴다. 하지만, 확장성이 좋지 않다. 지금처럼 사칙연산만 있는 경우에 적합하다.

2. 추상 클래스와 enum 둘 다 사용한 operation

: 구조적으로 설계가 가능하다. 확장성, 직관성이 좋다. 하지만, 복잡해질 가능성이 있다. 사칙연산만 있는 경우에는 도입하지 않는 게 좋을 것이다.

3. 추상 클래스만 사용한 operation

: class를 여러 개 사용하므로 상태 관리가 편리하고, 확장성이 좋다. 하지만 그만큼 클래스가 많아지고, 관리하기 까다로워진다. 복잡한 연산을 추가할 때는 적합하다.

방식 장점 단점 예시
enum만 사용 단순하고 직관적. 한 파일에 모든 연산 정의 가능. 확장성 제한. 상속 불가. 상태 관리 어려움. 연산 종류가 고정되고 단순할 때.
추상 클래스 + enum 구조적 설계 가능. 확장성과 직관성 모두 확보. 설계 복잡도 증가. 연산 종류를 자주 추가/변경할 때.
추상 클래스만 사용 상태 관리와 확장에 유리. 클래스가 많아지고 코드 관리 복잡. 연산이 복잡하거나 상태가 필요한 경우.

 

해서, 나는 복잡한 연산 까진 필요없으므로 enum은 그대로 쓰되 연산 종류를 추가하기 위해 추상 클래스를 도입하려 한다.

간단하게 제곱 정도만 추가해봐야겠다.

 

현재 내 enum이다. 여기서 연산자를 정의하고 받아서 결과까지 반환하고 있었다.


이제enum에서는 열거형으로 연산의 종류를 정의하고, 연산 정보를 관리하도록 한다.

abstract class에서 연산을 실행하는 구체적인 로직을 수행할 것이다.

enum과 추상 클래스 둘 다 사용하니 연산자 추가가 매우 간편해졌다.

기념으로 PowerOperation을 추가하였다.(거듭제곱)

 

'

계산도 잘 된다 ㅎ

 

주석도 다 달았고 이젠 진짜 제출하자!