◇ 코드 구현
- Step 1 : 기본적인 사칙연산 계산기
import java.util.Scanner;
public class Calculate {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String op = sc.next();
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println(calculate(op, a, b));
    }
    public static double calculate(String operator, int firstNumber, int secondNumber) {
        double f = (double) firstNumber;
        double s = (double) secondNumber;
        double result = 0;
        switch (operator) {
            case "+":
                result = f + s;
                break;
            case "-":
                result = f - s;
                break;
            case "*":
                result = f * s;
                break;
            case "/":
                if (s != 0) {
                    result = f / s;
                } else {
                    System.out.println("0으로 나눌 수 없습니다.");
                }
                break;
            default:
                System.out.println("사칙연산 기호 (+, -, *, /) 중에 입력해주세요.");
        }
        return result;
    }
}
- Step 2 : 나머지 연산 추가
 case "%":
                if (s != 0) {
                    result = f % s;
                } else {
                    System.out.println("0으로 나눌 수 없습니다.");
                }
                break;
- Step 3 : 클래스화
public class Main {
    public static void main(String[] args) {
        Calculator calculator  = new Calculator(new AddOperation(), new SubstractOperation(),
                new MultiplyOperation(), new DivideOperation());
        System.out.println(calculator.calculate("+", 10, 20));
    }
}public class Calculator {
    private final AddOperation addOperation;
    private final SubstractOperation substractOperation;
    private final MultiplyOperation multiplyOperation;
    private final DivideOperation divideOperation;
    public Calculator(AddOperation addOperation, SubstractOperation substractOperation, 
                      MultiplyOperation multiplyOperation, DivideOperation divideOperation) {
        this.addOperation = addOperation;
        this.substractOperation = substractOperation;
        this.multiplyOperation = multiplyOperation;
        this.divideOperation = divideOperation;
    }
    public double calculate(String operator, int firstNumber, int secondNumber) {
        double answer = 0;
        if(operator.equals("+")){
            answer = addOperation.operate(firstNumber, secondNumber);
        }else if(operator.equals("-")){
            answer = substractOperation.operate(firstNumber, secondNumber);
        }else if(operator.equals("*")){
            answer = multiplyOperation.operate(firstNumber, secondNumber);
        }else if(operator.equals("/")) {
            answer = divideOperation.operate(firstNumber, secondNumber);
        }
        return answer;
    }
}public class AddOperation {
    public double operate(int firstNumber, int secondNumber){
        return firstNumber + secondNumber;
    }
}
- Step 4 : 추상화
public class Main {
    public static void main(String[] args) {
        Calculator calculator  = new Calculator(new AddOperation());
        System.out.println(calculator.calculate(10, 20));
        calculator.setOperation(new MultiplyOperation());
        System.out.println(calculator.calculate(10,20));
    }
}public class 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;
    }
}public class AddOperation extends AbstractOperation{
    @Override
    public double operate(int firstNumber, int secondNumber){
        return firstNumber + secondNumber;
    }
}◇ 회고
- 클래스화 부분
- Calculator클래스부분이 전체적으로 이해가 안됨
- 아래 코드에서
 1. private final AddOperation addOperation을 쪼개서 해석
 private : 접근제어자로 변수들이 Calculator클래스 내부에서만 접근 가능
 final : 한번 할당되면 변경 불가능, 생성자에서 변수들이 초기화되면 더이상 변경안됨
 AddOperation : 변수타입
 addOperation : 변수명
 2. public Calculator(AddOperation addOperation, ...)을 쪼개서 해석
 public : 접근제어자로 어디서든 접근 가능
 Calculator : 클래스명(생성자명), 생성자는 Calculator객체를 초기화
 (AddOperation addOperation, ...) : 생성자가 받는 매개변수
 3. this.addOperation = addOperation
 this.addOperation : 현재 겍체의 addOperation을 가리킴
 = addOperation : 생성자 매개변수 addOperation을 현재 객체에 할당
 public class Calculator { 1. private final AddOperation addOperation;...(뺄셈, 나눗셈, 곱셈도 동일하게) 2. public Calculator(AddOperation addOperation, 뺄셈, 나눗셈, 곱셈) { 3. this.addOperation = addOperation; ... 뺄셈, 나눗셈, 곱셈 } public double calculate(String operator, int firstNumber, int secondNumber) { double answer = 0; if(operator.equals("+")){ answer = addOperation.operate(firstNumber, secondNumber); }else if(뺄셈, 나눗셈, 곱셈){ answer = ... } return answer; } }
 
- 변수
 구분 생성 소멸 자동 초기화 클래스 변수 클래스가 메모리에 올라갈 때 프로그램 종료 시 O 인스턴스 변수 인스턴스 생성 시 인스턴스 소멸 시 O 지역 변수 블록 내에서 변수 선언문 실행 시 블록을 벗어날 시 X(컴파일 에러) public class test { static int static_Var; // 클래스 변수 int instance_Var; // 인스턴스 변수 public static void main(String[] args) { int local_Var; // 지역 변수 } }- 클래스 변수(필드) : 클래스 영역에서 메소드 보다 밖 범위에 static 제어자를 가진 변수
- 인스턴스 변수(전역 변수)(필드) : 클래스 영역에서 메소드 보다 밖 범위에 static을 가지지 않은 변수
- 지역 변수 : 클래스 영역 안 메서드, 생성자, 초기화 블럭 안에 있는 변수, 해당 범위 내에서만 유효
 
'Java & Spring > Java' 카테고리의 다른 글
| 14일차 - Java강의(쓰레드) (0) | 2024.08.01 | 
|---|---|
| 13일차 - Java강의(예외, 제네릭) (0) | 2024.07.31 | 
| 10일차 - Java강의(제어자, package, import, 상속, this, super) (0) | 2024.07.26 | 
| 9일차 - Java강의(클래스, 필드, 생성자, 멤버, this) (0) | 2024.07.25 | 
| 8일차 - Java강의(객체지향 ☆) (0) | 2024.07.24 |