◇ 코드 구현
- 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 |