1. Main 클래스와 Calculrator 클래스 만들기
- Calculator에 어떤 연산자를 쓸지와 2개의 정수를 입력 받게 구현 하였다. 이렇게 첫번째 구현방법은 쉬웠다.
// Main.java - 실행 되는 코드
package Calculator;
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
System.out.println(calculator.calculate("%", 8, 3));
// Calculator.java
public double calculate(String operator, int firstNumber, int secondNumber) {
double answer = 0;
if (operator.equals("+")) {
answer = firstNumber + secondNumber;
} else if (operator.equals("-")) {
answer = firstNumber - secondNumber;
} else if (operator.equals("*")) {
answer = firstNumber * secondNumber;
} else if (operator.equals("/")) {
answer = firstNumber / secondNumber;
} else if (operator.equals("%")) {
answer = firstNumber % secondNumber;
}
return answer;
}
2. Calculrator에서 구현한 연산을 세분화된 클래스로 구현하기
- 각각의 클래스에 +, -, /, * 를 구현했다.
- Calculator 클래스에 4가지 새로 구현한 클래스들을 사용 할 수 있게 코드를 새로 기입했다.
- private와 final을 이용해서 4개의 클래스 코드가 영향을 받지 않게 해주었다.
- Calculator를 생성하게 되면 4개의 연산자를 사용할 수 있고 그 클래스들을 가리킬수 있게 this를 사용했다.
// Add class - 더하기 연산을 하기 위한 클래스
package Calculator;
public class AddOperation {
public double operate(int firstNumber, int secondNumber){
return firstNumber + secondNumber;
}
}
// Calculator 클래스를 변경함
private final AddOperation addOperation;
private final SubstractOperation substractOperation;
private final MultipleOperation multipleOperation;
private final DivideOperation divideOperation;
public Calculator(AddOperation addOperation,
SubstractOperation substractOperation,
MultipleOperation multipleOperation,
DivideOperation divideOperation){
this.addOperation = addOperation;
this.substractOperation = substractOperation;
this.multipleOperation = multipleOperation;
this.divideOperation = divideOperation;
}
3. 추상화 작업해보기
- Abstract를 사용해서 각각의 연산 클래스들을 추상화 시켜 보았다.
- 추상화를 하기 위해 AbstractOperation 클래스를 만들었고 2개의 숫자를 입력 받을 수 있게 코드를 짰다.
- 연산 클래스 4개 모두 AbstractOperation 를 오버라이딩 했다.
- Calculator 클래스의 코드도 AbstractOperation를 사용할 수 있게 했다.
- 추상화를 시키고 나면 Main 클래스에서 2가지 숫자를 입력받고 계산 할 수 있게 된다.
// 더하기 클래스
public class AddOperation extends AbstractOperation{
@Override
public double operate(int firstNumber, int secondNumber){
return firstNumber + secondNumber;
}
}
// Calculator 클래스
private AbstractOperation operation;
public Calculator(AbstractOperation operation){
this.operation = operation;
}
public void setOperation(AbstractOperation operation){
this.operation = operation;
}
public double calculate(int firstNumber, int secondNumber){
double answer = 0;
answer = operation.operate(firstNumber, secondNumber);
return answer;
}
// Main 클래스
Calculator calculator = new Calculator(new AddOperation());
System.out.println(calculator.calculate(10, 20));
calculator.setOperation(new MultipleOperation());
System.out.println(calculator.calculate(10, 20));
첫 번째를 구현 하는 것은 쉬웠으나
두 번째를 구현하는 부분에서는 각각의 클래스를 구현해서 세분화 한적이 없었으므로 헷갈리는 부분도 있었으나 강의도 다시 찾아보고 강의자료도 다시 읽어 보면서 구현할 수 있었다.
세 번째인 추상화 작업을 할때도 두 번째와 마찬가지로 다시 한번 읽어보고 찾아봤더니 어느 정도 구현이 가능했다.
이렇게 만들어서 사용하는 것에 어서 익숙해져야 겠다는 생각을 했다.
'스터디일지 > JAVA' 카테고리의 다른 글
[2023.08.23] Streams (0) | 2023.08.23 |
---|---|
[2023.08.15 ~ 16] 자바 문법 3주차 강의 (0) | 2023.08.16 |
[2023.08.15] 자바 2주차 문법 강의 (0) | 2023.08.15 |
[2023.08.14] 자바 1주차 문법 강의 (0) | 2023.08.14 |
[2023.08.01] 자바 객체 지향 프로그래밍 (0) | 2023.08.01 |