▶ 진행사항
- 오늘은 3주차 강의 이해가 안되는 부분 복습과 '계산기 만들기' 프로젝트의 2단계 부분 마무리를 지었다.
▶ 계산기 만들기 LV2 - 마무리
- 어제의 연장선으로 오늘은 계산기 만들기 프로젝트의 2단계 부분의 코드를 좀더 보완하고 깔끔하게 작동시키기 위해 어느 부분을 수정하면 좋을까로 코드를 하루종일 쳐다보고 있었던것 같다.
결과적으로는 필요없는 일부 코드를 삭제, 개선 후 프로젝트 LV2를 마무리하고, 깃허브 업로드를 진행했다.
▷ 개선된 switch 문 (case '+': result = firstNo + secondNo; break 을 case '+' -> firstNo + secondNo; 로 개선된것을 볼수 있다.
public int calculate(int firstNo, int secondNo, char fbo) {
int result = switch (fbo) {
case '+' -> firstNo + secondNo;
case '-' -> firstNo - secondNo;
case '*' -> firstNo * secondNo;
case '/' -> firstNo / secondNo;
default -> 0;
};
▷ Calculator 클래스에 저장된 연산 결과들 중 가장 먼저 저장된 데이터를 가진 메서드를 구현한 후 App 클래스의 main 메서드에 삭제 메서드가 활용될 수 있도록 수정
public void deleteFirstSave() {
if (!results.isEmpty()) {
results.remove(0); // 첫 세이브값 삭제
}
}
※ 이후 출력부분에서 데이터 삭제 메서드 구현
System.out.println("가장 먼저 저장한 값을 삭제 하시겠습니까? (delete 입력시 삭제 or 아무키 입력으로 continue)");
String delete = sc.next();
if (delete.equalsIgnoreCase("delete")) { // equalIgnoreCase = 대소문자 구분없이 입력값 인식
if (!calculator.getResults().isEmpty()) {
calculator.deleteFirstSave(); // 첫 세이브값 삭제
System.out.println("삭제 완료."); //
▷ 프로젝트 LV2 마무리 코드
public class App {
public static void main(String[] args) {
System.out.println("Hello, Calculator!");
Scanner sc = new Scanner(System.in);
Calculator calculator = new Calculator(); // Calculator 인스턴스 생성
while (true) {
// 첫번째 값 입력받기
System.out.println("첫 번째 숫자를 입력하세요: ");
int firstNo = sc.nextInt();
// 사칙연산 입력받기
System.out.println("연산자를 입력하세요: [+,-,*,/]");
char fbo = sc.next().charAt(0);
// 두번째 값 입력받기
System.out.println("두 번째 숫자를 입력하세요: ");
int secondNo = sc.nextInt();
// 결과값 출력
int result = calculator.calculate(firstNo, secondNo, fbo);
System.out.println("결과: " + firstNo + " " + fbo + " " + secondNo + " = " + result);
// 결과값 저장, 현재 저장된 값 출력 및 삭제 여부 출력
System.out.println("현재 저장된 결과 : " + calculator.getResults().size() + " " + calculator.getResults());
System.out.println("가장 먼저 저장한 값을 삭제 하시겠습니까? (delete 입력시 삭제 or 아무키 입력으로 continue)");
String delete = sc.next();
if (delete.equalsIgnoreCase("delete")) { // equalIgnoreCase = 대소문자 구분없이 입력값 인식
if (!calculator.getResults().isEmpty()) {
calculator.deleteFirstSave(); // 첫 세이브값 삭제
System.out.println("삭제 완료."); //
}
}
System.out.println("계속 계산하시겠습니까? (exit 입력시 종료 or 아무키 입력으로 continue)");
String exit = sc.next();
if (exit.equalsIgnoreCase("exit")) {
break;
}
}
// 종료시 마지막 저장된 값 차례대로 출력
System.out.println("최종 저장 결과: ");
for (int res : calculator.getResults()) {
System.out.println(res);
}
sc.close();
}
}
public class Calculator {
private List<Integer> results;
public Calculator() {
this.results = new ArrayList<>(); // 연산 결과를 저장하는 컬렉션 타입 필드 선언 및 생성
}
// 사칙연산 수행 메서드
public int calculate(int firstNo, int secondNo, char fbo) {
int result = switch (fbo) {
case '+' -> firstNo + secondNo;
case '-' -> firstNo - secondNo;
case '*' -> firstNo * secondNo;
case '/' -> firstNo / secondNo;
default -> 0;
};
addResult(result);
return result;
}
// Getter 메서드 - 캡슐화
public List<Integer> getResults() { // 계산 결과를 저장
return new ArrayList<>(results);
}
// Setter 메서드 - 캡슐화
public void setResults(List<Integer> newResults) {
this.results = new ArrayList<>(newResults);
}
public void addResult(int result) {
results.add(result);
}
public void deleteFirstSave() {
if (!results.isEmpty()) {
results.remove(0); // 첫 세이브값 삭제
}
}
}
▶ 마무리 회고
- 이번 프로젝트를 레벨2까지 마무리하며 어려웠던 점이라고 한다면, 물론 자신있게 처음부터 모든부분이 다 어려웠다고 할 수 있을거 같다. 하지만 그렇다고 힘들었다고는 생각하지 않는다. 어려운 부분이 나올때마다. 계속해서 복습 및 검색으로 해당 메서드는 어찌 작동하는지에 대해 더 자세히 들여다 볼수 있었던 시간이라고 생각한다. 처음 프로젝트를 시작했을땐 java에 e도 모르던 내가 그래도 기초를 갈고닦을수있던 좋은 경험이었다.
'TIL' 카테고리의 다른 글
| TIL - 2025/02/03 (0) | 2025.02.03 |
|---|---|
| TIL - 2025/01/17 (1) | 2025.01.17 |
| TIL 2025/01/08 (0) | 2025.01.08 |
| TIL - 2025/01/03 (1) | 2025.01.03 |
| TIL - 2024/12/31 (0) | 2024.12.31 |