어제 블로그에 기본 구조를 정리할 때는 완벽히 이해하지 못했는데,
오늘 직접 코드를 짜면서 개념을 완전히 이해하고 혼자서 Step 2 계산기를 완성했다!
✅ 오늘 완성한 것
- Calculator 클래스와 App 클래스를 분리해서 구현
- getter, setter 개념 이해 및 활용
- App에서 Calculator를 객체로 만들어서 활용
- 결과 저장, 조회, 삭제 기능까지 구현 완료
전체 코드
Calculator.java
package calculator;
import java.util.ArrayList;
public class Calculator {
ArrayList<Integer> results = new ArrayList<>();
public int calculator(int first, int second, char operator) {
int result = 0;
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;
} else {
result = first / second;
break;
}
default:
System.out.println("올바른 사칙연산을 입력해주세요.");
}
results.add(result);
return result;
}
public ArrayList<Integer> getResults() {
return results;
}
public void setResults() {
this.results = results;
}
public void removeResults() {
results.remove(0);
}
}
App.java
package calculator;
import java.util.Scanner;
public class App {
static void main() {
Calculator calculator = new Calculator();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("첫 번째 양의 정수를 입력하세요 : ");
int first = scanner.nextInt();
if (first < 0) {
System.out.println("양의 정수를 입력해주세요.");
continue;
}
System.out.println("두 번째 양의 정수를 입력하세요 : ");
int second = scanner.nextInt();
if (second < 0) {
System.out.println("양의 정수를 입력해주세요.");
continue;
}
System.out.println("사칙연산 기호를 입력하세요 : ");
char operator = scanner.next().charAt(0);
int result = calculator.calculator(first, second, operator);
System.out.println("결과 : " + result);
System.out.println("기록을 조회하시겠습니까?(yes 입력 시 조회) : ");
String yes = scanner.next();
if (yes.equals("yes")) {
System.out.println("List : " + calculator.getResults());
}
System.out.println("첫 번째 기록을 삭제하시겠습니까?(yes 입력 시 삭제) : ");
String yes2 = scanner.next();
if (yes2.equals("yes")) {
calculator.removeResults();
System.out.println("삭제 완료");
}
System.out.println("현재 List : " + calculator.getResults());
System.out.println("종료하려면 exit를 입력해주세요(아무거나 입력 시 계속) : ");
String exit = scanner.next();
if (exit.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
}
}
}
오늘 핵심으로 배운 것
1. 클래스 분리 (Calculator vs App)
오늘 가장 중요하게 배운 것은 역할에 따라 클래스를 분리하는 것이다.
| 클래스 | 역할 |
| Calculator | 계산 로직 + 결과 저장 |
| App | 사용자 입력 받고 Calculator 활용 |
Calculator는 계산만 하고, App은 그걸 가져다 쓰는 구조다.
마치 계산기 기계(Calculator) 를 만들어놓고, 사람(App) 이 버튼을 누르는 것과 같다!
// App에서 Calculator 객체를 만들어서 활용!
Calculator calculator = new Calculator();
int result = calculator.calculator(first, second, operator);
2. getter / setter
results 필드는 private 으로 막혀있어서 외부에서 직접 접근이 불가능하다. 그래서 getter와 setter 를 통해서만 접근할 수 있다.
getter → 내 정보를 조회한다 setter → 내 정보를 수정한다
// getter - results 리스트를 꺼내줌
public ArrayList<Integer> getResults() {
return results;
}
// setter - results 리스트를 교체함
public void setResults() {
this.results = results;
}
이번 프로젝트에서 setter는 만들어만 놓고 활용하지 않았다.
이유는 결과를 통째로 교체할 일이 없었기 때문이다. 결과를 하나씩 추가할 때는 results.add() 를 직접 쓰는 게 더 자연스럽다.
3. App에서 Calculator 활용
// 계산 실행
int result = calculator.calculator(first, second, operator);
// 결과 조회 (getter 활용!)
System.out.println("List : " + calculator.getResults());
// 첫 번째 결과 삭제
calculator.removeResults();
Calculator 안에 있는 메서드를 App에서 이렇게 꺼내 쓸 수 있다는 게 오늘 핵심이었다!
실행 결과

느낀 점
어제 블로그에 개념을 정리할 때는 완벽히 이해하지 못했는데, 오늘 직접 코드를 짜면서 하나하나 이해하다 보니 Step 2 계산기를 혼자서 완성할 수 있었다. 오늘은 완전히 내 것으로 만든 것 같아서 뿌듯하다!
내일은 강의 마지막까지 다 보고 도전 과제를 도전해볼 것이다!