객체 지향프로그래밍을 이용하여 계산기를 만들어봄!
부모 클래스 Calculator
public class Calculator {
double number;
AddOperation addOperation;
SubstractOperation substractOperation;
MultiplyOperation multiplyOperation;
DivideOperation divideOperation;
AbstractOperation abstractOperation;
public Calculator(AddOperation addOperation, SubstractOperation substractOperation,
MultiplyOperation multiplyOperation, DivideOperation divideOperation){
this.addOperation = addOperation;
this.substractOperation = substractOperation;
this.multiplyOperation = multiplyOperation;
this.divideOperation = divideOperation;
}
public Calculator(AbstractOperation abstractOperation){
this.abstractOperation = abstractOperation;
}
public double calculate(int firstNumber, int secondNumber){
number = abstractOperation.operate(firstNumber,secondNumber);
return number;
}
}
더하기 파트
public class AddOperation extends AbstractOperation{
double number;
public double operate(int firstNumber, int secondNumber) {
number = firstNumber+secondNumber;
return number;
}
}
빼기 파트
public class SubstractOperation extends AbstractOperation {
double number;
public double operate(int firstNumber, int secondNumber){
number = firstNumber - secondNumber;
return number;
}
}
곱하기파트
public class MultiplyOperation extends AbstractOperation {
double number;
public double operate(int firstNumber, int secondNumber) {
number = firstNumber*secondNumber;
return number;
}
}
나누기 파트
public class DivideOperation extends AbstractOperation {
double number;
public double operate(int firstNumber, int secondNumber) {
number = firstNumber/secondNumber;
return number;
}
}
추상 클래스
abstract class AbstractOperation{
abstract double operate(int firstNumber, int secondNumber);
}
작동 main
// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
public static void main(String[] args) {
AbstractOperation addOpration = new AddOperation();
AbstractOperation subOpration = new SubstractOperation();
AbstractOperation mulOpration = new MultiplyOperation();
AbstractOperation devOpration = new DivideOperation();
System.out.println(addOpration.operate(10,20));
System.out.println(subOpration.operate(10,20));
System.out.println(mulOpration.operate(10,20));
System.out.println(devOpration.operate(10,20));
}
}
작동방식은
더하기,빼기,곱하기,나누기 기능을 각각 객체로서 만들어주었다. 이를 추상 클래스인 AbstractOperation에 상속받는다.
Calculator에는 생성자와, 계산 메서드가 존재한다. 생성자는 AbstractOperation 객체를받아서 생성한다. 나머지 계산을 위한 객체들을 모두 AbstractOperation클래스로 상속을 받았기 new AddOperation()와 같이 자식 클래스로 인스턴스를 생성해도 Calculator에 정상적으로 생성된다.(여기서 Calculator 클래스의 4개의 인자를 받는 생성자는 없어도 되는 생성자)
계산을 해주는 calculate 메서드는 AbstractOperation의 메서드를 사용한다.
이때 AbstractOperation의 메서드는 추상 메서드라서 자식 클래스들이 자신의 역할에 맞게 오버라이딩을 했다.
이렇게 객체지향 프로그래밍을 본격적으로 시작했다. 이 프로젝트를 진행하면서 느낀건 사실 계산기 프로그래밍은 main 부분에 모두작성 할 수 있지만, 코드 객체 지향성 프로그래밍은 깔끔하게 main메서드에는 인스턴스 생성과 필요한 메서드만 가져와서 사용 할 수 있어 보기에 훨씬 간편했다. 또한 객체의 연결성을 이해하는 것도 오히려 더 직관적으로 더 잘 이해할수 있었다. 또한 이 프로젝트를 라이브러리로 남겨 앞으로 비슷한프로젝트를 할 때 가져와 쓸 수 있기에 더 좋았다.
그리고 추상 클래스를 사용하여 클래스를 하나 사용하여 코드가 정말 많이 깔끔해질 수 있다는걸 알 수 있었다. 이걸 통해 앞으로 많은 기능을 더 쉽게 사용한다면 코드를 쉽고 모두가 알아보기 쉬운 코드를 작성 할 수 있다고 생각했다.
협업을 하기 위해서는 나만 알아 볼 수 있는 것이 아닌, 모두가 다같이 이해할 수 있는 코드를 작성해야 하기 때문이다.
'공부 > 예제 풀이' 카테고리의 다른 글
백준 1427번(실패) (0) | 2023.10.18 |
---|---|
백준 10814번 (실패) (0) | 2023.10.18 |
2주차 숙제 (0) | 2023.10.14 |
개인 과제 01.(수정) (0) | 2023.10.12 |
1주차 숙제. (1) | 2023.10.12 |