Java: 17
JDK: 17.0.1
IDE: IntelliJ
| 사칙연산 수행 ,결과 저장 | Calculator 활용 | 캡슐화 적용 | 오래된 연산 결과 삭제 기능 |
|---|---|---|---|
Calculator에서 연산 수행 후 결과 반환 + 컬렉션에 저장 | 연산 수행을 Calculator 클래스가 담당하게 할 것 | Calculator의 결과 필드에 직접 접근 금지 ( Getter/Setter ) | 가장 오래된 연산 결과를 삭제하는 메서드 구현 & 활용 가능하도록 수정 |


- 누적 연산 vs 1회 연산
- "가장 오래된 값 삭제" 기능 필요성
clear entry (CE) 기능을 추가하기로 했다.ac) 시 연산 기록을 지우도록 했다.
- 코드 가독성
boolean firstCal 을 추가하면서 코드가 더 깔끔해졌다.* → 첫 연산 vs 이후 연산을 쉽게 구분할 수 있어서 흐름이 자연스러워졌다.
- 콘솔 출력 가독성
(이라고 말하기도 민망한,, 내가 어렵게 느꼈던 점들)
clone을 다운로드 해뒀었다. 덕분에 코드를 복구할 수 있었다. 문제
해결
Main에서 Calculator를 생성한 뒤, InputCal을 만들 때 Manager에도 Calculator를 전달하여 연결했다. (나의 경우 manager를 통해 calculator를 기록 초기화 등 관리해야 하기 때문)📌 객체 관계 정리
Main ├── Calculator (연산 + 기록) ├── InputCal (입력) ├── Manager (계산기 초기화 및 종료) <----- 여기는 calculator를 참조해야한다!
문제
누적 연산이 가능하도록 구현을 하다보니 첫 번째 입력값을 어떻게 처리할지 애매했다.
firstNum은 1회차 연산에만 사용되고 이후에는 필요없는 값이었다.
1회차 연산이 끝나면 첫 숫자를 다시 입력할 필요없이 '1회차 연산 결과 값'에다 다음 연산을 해야했다.
해결
firstNum secondNum => currentNum calNum으로 변경하고
반복문의 마지막에 currentNum = result;로 재할당해서, 다음 연산이 이전 값 기준으로 진행되도록 했다.

문제
실제 계산기 처럼 연산 히스토리까지 함께 출력하고 싶은데 어려웠다.
해결
stringbuiler라는 메서드를 알게 됐고 .append() 로 문자열을 이어 붙일 수 있었다.
연산 결과를 보여줄 때마다 연산 식이 히스토리처럼 같이 보이게 구현했다.
💡 배운 점
✔ StringBuilder와 .append()의 사용법
문제
연산결과를 Stringbuilder로 이어 붙였었고, 이 기록이 String 타입으로 저장되어 있다 보니 split()으로 잘라서 구분해야 하는데, 너무 어려웠다.
해결
어차피 연산 히스토리를 나중에 통으로 삭제해야 하니 List 형태로 저장하는게 적절했다
StringBuilder 대신 List<String>을 사용하여 연산 내역을 저장하도록 변경했다.
💡+ 이때 만든 List를 clear, allclear 기능을 만들때도 활용할 수 있었다!

문제
누적 연산을 구현하다보니 자꾸만 첫 연산일 경우, 아닐경우를 분리해야 했다.
main에서 반복문 안에 반복문을 넣어야 한다던지, 히스토리 출력 코드가 중복된다던지..
코드가 지저분해지는 일들이 있었다
해결
튜터님께 피드백을 받고, 첫 연산인지 여부를 판단하는 boolean 변수를 추가했다.
✔ 첫 연산이라면: 처음 입력값을 받고, 연산 수행
✔ 이후 연산이라면: 연산 기호부터 입력받고, 바로 연산 수행
또한 히스토리 출력할때, 최근 기록을 삭제할 때, 초기화시 등등 아주 유용하게 사용할 수 있었다.
이 논리식 하나로 코드가 얼마나 깔끔해졌는지 모른다..!


boolean 변수를 활용해서 불필요한 구문들의 중복을 줄이고 가독성을 높일 수 있었다! 문제
코딩이 처음이다 보니 빨간 밑줄(에러 메시지)이 뜨는 것이 무서웠다.
게다가 1번에 썼듯 github도 한번 날려먹었고, TIL도 사실 다 작성했었는데,
하필 그날 !! 벨로그 서버가 터져서 글이 다 날아갔다...
해결
에러 메시지를 읽고 원인을 분석하는 습관을 들이려고 노력 중이다
결국 날아간 글은 다시 쓰는중... 😇
💡 배운 점
✔ 에러 메시지는 해결을 위한 힌트를 함께 보여준다!
차분하게 분석하면 문제를 해결하는 데 오히려 도움이 된다.
클래스를 분리하면서부터 각 클래스의 역할과 메서드들을 구조적으로 잘 파악하는 것이 중요하다.
시간이 지나면서 어떤 기능을 어디서 수행했는지 경계가 모호해지고 역할이 섞여버린다.
커밋메세지도 일관되고 명료하게 작성하면 좋을 것 같다. 혼자하는 작업이었는데도 어디까지 했는지, 어떤 항목이 남았는지 헷갈렸다.
튜터님께 피드백 받는 걸 부끄러워 하지말자..! 모르는 부분이 많은데다가 튜터님들께는 사소할거라 생각해서 혼자 해결해보려 노력했는데, 피드백을 받고 나니 명쾌하게 해결돼서 고민했던 시간이 아까워졌었다
또한 TIL은 짧게라도 꾸준히 작성해야겠다. 분명 다 이해한 부분이라고 생각했는데도
해당 부분을 다시 응용하거나 수정할때 전에 쓴 코드를 계속 분석해야 했다..
내 언어로 쓰여진 정리본이 필요하다는걸 한번 더 느꼈다