✏️ 0429
3주차 타임라인 발제
Java 문법 종합반 강의_3주차 과제
개인 과제
3주차 타임라인 발제
벌써 시작한지 3주차라니 시간 잘 간다..
내일부터 Java 보충반 / 심화반 시작된다고 한다
수업은 서로 다른 날짜에 해서 모두 들을 수 있지만 OT는 동시에 시작한다고 하는데 난 어느 쪽이지..?
개인 과제는 수요일 2시까지 제출❗
과제를 제출하지 않아도 패널티는 없지만
덜 했더라도 제출해서 담당 튜터님에게 피드백 받는 것이 훨씬 좋다고 하신다
// 주석 처리해서 넘어려워흑흑 해야겠다
...개인 과제 제출 링크 확인하러 들어갔다가 발견했다
끼약 시간에 쫓기는 것 같아요 🫠🫠
3주차 강의 과제
어려울 것 같아서 매우 긴장했는데
생각보다 그렇게 막 어렵진 않았던 것 같다!!
정답코드 안 보고 제시 사항만 보고 내가 직접 코드를 짜보고 막히면 다시 정리된 내용 찾아보는 식으로 해서
사실 제대로 된 코드는 아닐 수도 있다ㅎ
Step 1, 2
- 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스 만들기
- 반환 타입이 doubled 인 calculate 메서드 존재
- String 타입의 operator 매개변수를 통해 연산자
- int 타입의 firstNumber, secondNumber 매개변수를 통해 피연산자
- 나머지 연산자(%) 연산자 내용도 추가
// 더하기, 빼기, 나누기, 곱하기 연산을 수행하는 Calculator
public class Calculator {
// 필드
String operator; // 연산자
int firstNumber;
int secondNumber;
// 기본 생성자 (생략)
// 메서드
public double calculate (String operator, int firstNumber, int secondNumber) {
double result = 0;
switch (operator) {
case "+" :
result = firstNumber + secondNumber;
break;
case "-" :
result = firstNumber - secondNumber;
break;
case "*" :
result = firstNumber * secondNumber;
break;
case "/" :
result = firstNumber / secondNumber;
break;
case "%" :
result = firstNumber % secondNumber;
break;
default:
System.out.println("지정된 연산자가 아닙니다");
break;
}
return result;
}
}
정답 코드에선 if 문을 사용했는데 그것보단 swich 문이 가독성이 더 좋을 것 같아서 사용했다
Step 3
- 연산 클래스를 만든 후 Calculator 클래스와 관계 맺기
- Calculator 클래스 내부 코드 변경 / 나머지 연산자(%) 제외
AddOperation, SubstractOperation, MultiplyOperation, DivieOperation.java
public class AddOperation {
public double operate(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
};
}
각 연산자 클래스 안에서 계산하도록 코드 변경
Calcultor.java
// 더하기, 빼기, 나누기, 곱하기 연산을 수행하는 Calculator
public class Calculator {
AddOperation addOperation = new AddOperation();
SubstractOperation substractOperation = new SubstractOperation();
MultiplyOperation multiplyOperation = new MultiplyOperation();
DivideOperation divideOperation = new DivideOperation();
public double calculate (String operator, int firstNumber, int secondNumber) {
double result = 0;
switch (operator) {
case "+" :
result = addOperation.operate(firstNumber, secondNumber);
break;
case "-" :
result = substractOperation.operate(firstNumber, secondNumber);
break;
case "*" :
result = multiplyOperation.operate(firstNumber, secondNumber);
break;
case "/" :
result = divideOperation.operate(firstNumber, secondNumber);
break;
case "%" :
result = firstNumber % secondNumber;
break;
default:
System.out.println("지정된 연산자가 아닙니다");
break;
}
return result;
}
}
각 클래스의 객체를 생성해서 메서드 호출했다
Calcultor 클래스에서 모든 걸 처리했다면 이제 계산을 각 클래스에서 하게 되어 책임이 줄게 되었다
혼자 노동하던 계산기 클래스가 직원을 고용해서 업무를 분담하게 되었다
Step 4
- 연산 클래스들의 AbstractOperation (추상 클래스) 사용
- Calculator 클래스의 내부 코드 변경
- Calculator 의 calculate 메서드의 매개변수 변경
AbstractOperation.java
public abstract class AbstractOperation {
abstract double operate(int firstNumber, int secondNumber);
}
추상 클래스 선언
추상 메서드는 { ] 블럭 없이 !!
AddOperation, SubstractOperation, MultiplyOperation, DivieOperation.java
public class AddOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
};
}
각 연산자 클래스에는 추상 클래스를 상속하게 extends 키워드를 추가해주고
메서드를 사용할 수 있게 Override 해주기
Calculator.java
public class Calculator {
AbstractOperation operation;
// 생성자
public Calculator(AbstractOperation operation) {
this.operation = operation;
}
public double calculate (int firstNumber, int secondNumber) {
double result = 0;
result = operation.operate(firstNumber, secondNumber);
return result;
}
}
추상 클래스를 이용해 연산자 기능을 불러와야 하기 때문에 생성자 적어주기
더이상 연산자를 받아올 필요가 없으니 calculate 메서드에서 String operate 매개변수 삭제
메서드 내용 수정 !
Main.java
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator(new AddOperation()); // 더하기 연산
System.out.println(calculator.calculate(10,20)); // 30.0
System.out.println(calculator.calculate(60,20)); // 80.0
calculator = new Calculator(new SubstractOperation()); // 빼기 연산
System.out.println(calculator.calculate(10,20)); // -10.0
System.out.println(calculator.calculate(60,20)); // 40.0
}
}
이렇게 까지가 내가 정답 코드를 보지 않고 직접 풀어본 코드다!
개인과제 하기 전에 인텔리제이에 깃 연동해서 history 남는 거 까지 확인했다
commit 을 꼭 해달라는 이유가 hitstory 에 기록이 아주 잘 남기 때문이엇나보다
하면서 계속 생성자...추상 클래스..메서드...접근제어자... 활용하려고 보니 정리가 되지 않아 다시 복습을 해야했다
어? 이때 무슨 코드 사용하면 되지 않나?
라면서 머리속에서 튀어나오는 정도가 아닌 모양이다
좀 더 열심히 해야겠다
다 풀고 정답 코드를 보니 setCalculator 메서드를 추가해서 연산자가 바뀔 때
내 코드처럼 다시 객체 생성해서 불러오는 게 아니라 그냥 변경만 해줘도 바꿀 수 있었다
사실 처음에는 저 그림을 보고
그래서 이게 무슨 그림이야? 뭘 뜻하는 그림인거지? 라는 생각도 들었다
나만 그런걸까나! 인식하는데 시간이 걸렸다
그래도 step 1,2 까진 수월하게 만들 수 있어서 잘 배웠구나 싶었다
step 3 은 하면서 조금 멈칫하기도 했다
step 4 추상 클래스 부분을 제일 걱정했는데 생각보다 막힘없이 했던 것 같다
물론 코드는 잘 실행됐는데 어라 잘되네? 였다 솔직히 빨간글을 많이 볼 줄 알았다 ㅋㅋ
개인 과제
- 과제를 시작하기 전 확인할 것
⭐요구사항을 완료할 때마다 git commit 꼭 남기기!
⭐ 학습을 위해 소스 코드를 설명하는 주석 달아두기!
계산기 Level 1 : 학습 목표
- 변수 & 타입 이해하기
- 연산자 이해하기
- 제어문 & 반복문 이해하기
- 배열 & 컬렉션 이해하기
으윽.. 3줄 이상 긴 글을 읽으면 바닥에 있는 레고를 밟게 되는 지병이..!
스윽 훌터보면서 해보고 있는데
이게 맞는 건가 싶고.. 글을 잘 이해하고 코드를 작성하고 있는 건지 모르겠다!
'개발 일지 > TIL' 카테고리의 다른 글
[ #13 ] TIL (개인과제 Level 2) (1) | 2024.05.01 |
---|---|
[ #12 ] TIL (개인과제 Level 1) (1) | 2024.04.30 |
[ #10 ] TIL (0) | 2024.04.27 |
[ #9 ] TIL (3) | 2024.04.25 |
[ #8 ] TIL (0) | 2024.04.24 |