STEP 2 진행하면서 문제가 되었던 것을 정리해보았다.
1. IntelliJ에서 push했더니 갑자기 거부당함
IntelliJ에서 커밋하고 push 버튼 눌렀더니 이런 창이 떴다.
저장소 'CalculatorProject' 내 현재 브랜치 'main'의 푸시가 거부되었습니다.
푸시 전 원격 변경 내용을 병합해야 합니다.

병합 버튼 눌렀더니 이번엔 Merge Conflict 창이 또 뜨고... Calculator.java랑 workspace.xml에서 충돌났다고 했다.

터미널 보니까 이런 메시지가 찍혀 있었다.
hint: You have divergent branches and need to specify how to reconcile them.
GitHub 원격에 내 로컬에 없는 커밋이 있었다.
로컬이랑 원격이 서로 다른 방향으로 수정된 상태에서 무작정 push하려 해서 거부당했던 것이다.
IntelliJ GUI로 계속 해결하려다 더 꼬일 것 같아서 그냥 터미널로 정석대로 처리했다.
git pull origin main
pull 하니까 merge conflict 발생했고, 충돌난 파일 직접 열어서 수정한 다음에 필요한 파일만 골라서 add했다.
git add Calculator.java
git commit -m "해결 완"
git push origin main
기본을 익히지 않고 마우스 클릭으로 편하게 하려다 오히려 더 헤맸다. 터미널로 하는 방법을 익히고 사용해야 될 것 같다.
2. GitHub 열어봤더니 필요없는 파일이 다 올라가 있음
GitHub 저장소 확인했더니 src 폴더 외에 .idea, .gitignore, CalculatorProject.iml, README.md까지 전부 올라가 있었다. src만 있으면 되는데 불필요한 것들이 다 딸려 왔다.

.idea는 IntelliJ가 IDE 설정 저장용으로 만드는 폴더라 소스코드랑 전혀 상관없는 파일인데, 처음에 신경 안 쓰고 커밋했더니
그냥 같이 올라가버렸다.
방법을 찾아본 후 로컬 파일은 그대로 두고 GitHub에서만 삭제하고 싶어서 --cached 옵션을 썼다.
git rm -r --cached .idea
git rm --cached .gitignore
git rm --cached CalculatorProject.iml
git rm --cached README.md
git commit -m "불필요한 파일 삭제"
git push origin main
--cached를 쓰면 내 컴퓨터에서는 파일이 그대로 있고 GitHub에서만 삭제된다.

그랬더니 저장소가 src 폴더만 남아서 깔끔해졌다. 앞으로는 처음 커밋 전에 뭘 올릴지 꼭 확인할 것이다.
3. 예외 처리 했는데 결과에 0이 자꾸 찍힘
처음에 Calculator 클래스의 calculator() 메서드 안 switch문에서 예외 처리를 했다.
0으로 나누면 오류 메시지 출력 후 break, 잘못된 연산자면 default에서 오류 메시지 출력 후 break.
// 문제 있는 코드
switch (operator) {
case '+': result = first + second; break;
case '-': result = first - second; break;
case '*': result = first * second; break;
case '/':
if (second == 0) {
System.out.println("0으로 나눌 수 없습니다.");
break; // switch만 빠져나옴
} else {
result = first / second;
break;
}
default:
System.out.println("올바른 사칙연산을 입력해주세요.");
break; // switch만 빠져나옴
}
results.add(result); // ⚠️ 여기가 문제
return result;
실행해보면 이렇게 나왔다.
// 0으로 나누기 시도했을 때
0으로 나눌 수 없습니다.
결과 : 0 ← ???
// 이상한 연산자 입력했을 때
올바른 사칙연산을 입력해주세요.
결과 : 0 ← ???
오류 메시지는 잘 뜨는데 결과에 0이 같이 찍히고 기록에도 남았다. 처음에는 왜 이러는지 몰랐는데,
원인은 break가 switch 블록만 탈출한다는 거였다.
switch를 break로 빠져나와도 그 아래의 results.add(result)랑 return result는 그대로 실행된다. result는 아무것도 안 담긴 초기값 0 상태니까 결국 results.add(0)이 실행되는 것이다.
두 케이스 모두 원인이 같았다.
- 0 나누기 →
result그대로 0 → switch 탈출 →results.add(0)실행 - 잘못된 연산자 →
result그대로 0 → switch 탈출 →results.add(0)실행
그래서 예외 처리를 Calculator.java 안에서 하지 말고 App.java의 루프에서 미리 걸러내도록 옮겼다.
// 수정된 App.java
if (!(operator == '+' || operator == '-' || operator == '*' || operator == '/')) {
System.out.println("올바른 사칙연산 기호를 입력해주세요.");
continue; // calculator() 호출 자체를 안 함
}
if (operator == '/' && second == 0) {
System.out.println("0으로 나눌 수 없습니다.");
continue; // calculator() 호출 자체를 안 함
}
int result = calculator.calculator(first, second, operator);
System.out.println("결과 : " + result);
// 수정된 Calculator.java
switch (operator) {
case '+': result = first + second; break;
case '-': result = first - second; break;
case '*': result = first * second; break;
case '/': result = first / second; break;
}
results.add(result);
return result;
이제 잘못된 입력이 들어오면 오류 메시지만 출력하고 continue로 루프 처음으로 돌아간다. calculator() 자체를 호출 안 하니까 0이 리스트에 쌓일 일이 없다.


아는 것과 직접 짜는 건 다르다는 걸 느꼈다. 앞으로는 예외 처리를 계산 시작 전에 미리 걸러내는 방식으로 짜는 습관을 들여야겠다.
STEP 2 완료 ✅ ㅎㅎ