일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 이분 탐색
- Elasticsearch
- Generics
- 계산기 만들기
- 백준
- 알고리즘
- 프로그래머스
- querydsl
- 객체지향
- OOP
- 내일배움캠프
- 완전탐색
- 이분탐색
- til
- ES
- 누적합
- 코딩테스트
- binary search
- 리팩토링
- Baekjoon
- SpringBoot
- parametric search
- 구현
- Spring
- programmers
- Algorithm
- 브루트포스
- 일정 관리
- Java
- BFS
- Today
- Total
개발하는 햄팡이
[JAVA][계산기 만들기-5] Lv3. Generics를 활용한 계산기 만들기 본문
이전 포스팅
https://bitj-bitbox.tistory.com/43
[JAVA][계산기 만들기-4] Lv3. Enum을 활용한 계산기 만들기
https://bitj-bitbox.tistory.com/40 [JAVA][계산기 만들기-1] github 라벨 편집, Issue Template 생성, PR Template 생성저번 주에 HTML, CSS, JavaScript를 사용하여 간단한 팀소개 페이지 만들기가 끝나고이번 주 부터는 Jav
bitj-bitbox.tistory.com
음..
제네릭을 활용해서 여러 타입을 받을 수 있게 하라고 되어있는데 나는 연산 메소드를 열거형 OperatorType에 만들어서
새로운 계산기를 하나 더 만들어야 할 것 같다.
OperatorType 파일을 수정하고 싶지는 않고...
새로 다시 만들기로 했다.
그래서 GenericsCalculator라는 이름으로 계산기 코드를 복제하고 제네릭을 활용한 계산기로 만들기로 했다.
T extends Number로 제한하면 숫자만 들어올 수 있기 때문에 연산이 알아서 잘 될줄 알았는데
Number에 포함된 BigInteger때문에 a-b 같은 간단한 연산을 못하는 상황
이거 각 매개변수 타입마다 오버로딩을 해줘야되는건가..근데 그럴거면 제네릭을 왜 써...ㅜ
제네릭 클래스를 어떻게 만들어야할까 도저히 감이 안와서 그냥 제네릭 메소드로만 구현했다..
어쨌든 피연산자로 여러 타입을 받을 수 있게 했으니 요구사항을 만족한게 아닐까..?
package calculator;
import java.util.LinkedList;
import java.util.List;
public class GenericCalculator {
private final List<Double> results;
public <S extends Number, U extends Number> double calculate(S num1, U num2, char operator) {
double doubleNum1 = num1.doubleValue();
double doubleNum2 = num2.doubleValue();
double result = 0;
switch (operator) {
case '+':
result = doubleNum1 + doubleNum2;
break;
case '-':
result = doubleNum1 - doubleNum2;
break;
case '*':
result = doubleNum1 * doubleNum2;
break;
case '/':
if (doubleNum2 == 0) {
throw new ArithmeticException("0으로 나눌 수 없습니다.");
}
result = doubleNum1 / doubleNum2;
break;
default:
System.out.println("[Error] : 알 수 없는 연산자입니다.");
}
this.results.add(result);
return result;
}
public GenericCalculator() {
this.results = new LinkedList<>();
}
public List<Double> getResults() {
return this.results;
}
public void setResults(List<Double> newResults) {
this.results.clear();
if (newResults != null) {
this.results.addAll(newResults);
}
}
public void deleteFirstResult() {
this.results.remove(0);
}
}
이건 제출 이후 진행되는 과제 해설 세션에서 뭘 의도한건지 봐야겠다..
'Back-End > Java' 카테고리의 다른 글
[JAVA][키오스크 만들기] 완성 후 리팩토링. (0) | 2025.05.01 |
---|---|
[JAVA][계산기 만들기-4] Lv3. Enum을 활용한 계산기 만들기 (0) | 2025.04.22 |
[JAVA][계산기 만들기-3] Lv2. 클래스를 사용하여 객체 지향 개념을 적용한 계산기 만들기 (0) | 2025.04.22 |
[JAVA][계산기 만들기-1] github 라벨 편집, Issue Template 생성, PR Template 생성 (1) | 2025.04.18 |
[JAVA] OOP란? - 객체 지향 프로그래밍의 개념과 특징 (1) | 2025.04.16 |