예전에, 계산기를 업그레이드 하기 전에 초반에는 구조가 이렇게 되어있었다.
주목할 곳은 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을 추가하였다.(거듭제곱)
계산도 잘 된다 ㅎ
주석도 다 달았고 이젠 진짜 제출하자!
'개인 공부용 프로젝트 > calculator' 카테고리의 다른 글
트러블슈팅 : 검색 결과..아아... <9> (0) | 2024.11.18 |
---|---|
인터페이스, 추상클래스.. 사용 가능할 것 같은데? <8> (0) | 2024.11.18 |
<finish> 가 아니라 리팩토링.. (0) | 2024.11.17 |