Camp/과제

[TIL] CH2 Java 계산기 과제 (트러블 슈팅)

taeri7204 2026. 6. 12. 13:25

TrouBle 1. charAt(0) 이 정확히 어떤 역할을 하는지 몰라 연산자 입력이 막혔다.

연산자를 입력받아야 하는데, Scanner로 받으면 String으로 들어온다. 근데 비교 연산(==)은 char 타입에서만 쓸 수 있어서 +, - 같은 기호를 비교하려면 변환이 필요했다.

 

// 처음 시도 - String으로 받으면 == 비교가 안 됨
String operator = sc.next();
if (operator == "+") { ... }  // 작동 안 함 (String 비교는 .equals() 써야 함)

 

String은 참조형이라 ==으로 값 비교가 안 된다. 연산자 하나짜리 문자는 char 타입으로 받는 게 훨씬 편하다.

 

char operator = sc.next().charAt(0);
// sc.next()     → "+" 같은 문자열 받기
// .charAt(0)    → 0번째 인덱스(첫 번째 문자) 꺼내기 → '+' (char 타입)

if (operator == '+') { ... } // char는 == 비교 가능

 

.charAt(인덱스) = 문자열에서 원하는 위치의 문자 하나 꺼내기. 인덱스는 0(중요!)부터 시작.

 

TrouBle 2. sc.nextInt() 뒤에 뭐가 와야 하는지 감이 안잡힌다.

자를 sc.nextInt()로 받는 건 알겠는데, 뒤에 ;만 붙이면 되는 건지 헷갈렸다. 특히 왜 변수에 담아야 하는지 이유를 몰랐다.

 

// 이렇게만 쓰면 되는 건가? 받은 값을 어디다 쓰지?
sc.nextInt(); // 입력은 받는데 저장이 안 됨

 

int num1 = sc.nextInt(); // 입력받은 정수를 num1 변수에 저장
int num2 = sc.nextInt(); // 두 번째 정수를 num2에 저장

 

TrouBle 3. Calculator 클래스를 분리하라는데, 어디서부터 어떻게..?

클래스 = "역할을 가진 틀" 의 개념이 막연했다. main = 실행 관리, Calculator = 계산 담당이라는 역할 분리 구조 적용이 쉽지 않음.

 

// Step.1 방식: main이 모든 걸 다 함 (역할 혼재)
public static void main(String[] args) {
    // 입력도 받고, 계산도 하고, 출력도 하고...
    if (operator == '+') result = num1 + num2;
}

// Step.2 방식: 역할 분리
// Calculator.java → "계산"만 담당
public class Calculator {
    public int calculate(int num1, int num2, char operator) {
        // 계산 로직만 여기에
    }
}

// Main.java → "흐름 관리"만 담당
public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        int result = calculator.calculate(num1, num2, operator);
    }
}

 

TrouBle 4. while(true) + break 구조를 처음에 어떻게 설계할지 몰랐다.

강의를 눈으로만 따라보면 너무나도 쉽게 느껴지는 구조와 이론들이었지만 막상 과제를 시작하면서 수업 내용을 응용해서 과제에 적용하는 과정 자체 부터 시간소모가 극심했다.

"exit 입력하면 종료"라는 조건을 어디에 어떻게 써야 하는지 감이 없었다.

"while(true)는 조건이 없는 반복이라 break로만 빠져나올 수 있다." : 눈으로 읽기에는 너무나도 쉬운 문장..

String 비교는 꼭 .equals() 쓸 것. == 쓰면 종료가 안 된다.

 

미구현 사항 (다음 과제 목표)

Calculator 클래스에 ArrayList<Integer> results로 계산 결과를 저장하는 기능은 구현했지만, 외부에서 접근하는 getter / setter는 이번 제출에 포함하지 않았다.

 

다음 과제 목표 및 느낀 점

이번 과제에서 제일 어려웠던 건 전체 구조를 어떻게 짜야 하는지 아예 감이 없는 것이었다.

문법을 하나씩은 알아도 어디에 뭘 쓰는지가 연결이 안 됐다. 문

제를 읽고 무엇을 요구하는 것인지는 이해하지만 어디서부터 어떻게 시작해야하는지 모르는 막막함이 너무 힘들었다.

결국 직접 코드를 써보고, 에러를 만나고, 이유를 찾아보는 과정을 반복하면서 조금씩 구조가 머릿속에 생기는 느낌이었다.

 

튜터님의 여러 조언들처럼 해설 영상을 계속 돌려보고 직접 부딛히고 체득하며, 영상을 보지 않고도 같은 과제를 완벽히 재현해낼 수 있을 때까지 반복 연습, 학습만이 답일 것이다.