์ด์ง€๋ฏผ์˜ ๊ฐœ๋ฐœ ๋…ธํŠธ

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ Java์™€ Spring์„ ์ค‘์‹ฌ์œผ๋กœ ํ•™์Šต ๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

๐Ÿ”ฅ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„/๐Ÿ“Œ ๊ณผ์ œ

[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Spring_3๊ธฐ] CH2 ๊ณ„์‚ฐ๊ธฐ ๊ณผ์ œ Step2

jiiimni 2026. 1. 27. 14:34

์ƒ๊ฐํ•ด๋ณด๊ธฐ

Step2๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฝ์–ด๋ณด๋‹ˆ
์ด๋ฒˆ ๋‹จ๊ณ„์˜ ํ•ต์‹ฌ์€ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ผ

  • ๊ณ„์‚ฐ ๋กœ์ง์„ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
  • ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ด€๋ฆฌ
  • ์™ธ๋ถ€์—์„œ ํ•„๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์บก์Аํ™”๋ฅผ ์ ์šฉ

์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.


์„ค๊ณ„

Step1์—์„œ๋Š” App ํด๋ž˜์Šค์˜ main ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ
์ž…๋ ฅ, ์—ฐ์‚ฐ, ์ถœ๋ ฅ, ๋ฐ˜๋ณต ์ œ์–ด๊ฐ€ ๋ชจ๋‘ ์ด๋ฃจ์–ด์กŒ๋‹ค.

Step2์—์„œ๋Š” ์—ญํ• ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ„์—ˆ๋‹ค.

  • App ํด๋ž˜์Šค
    ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๊ฒฐ๊ณผ ์ถœ๋ ฅ, ๋ฐ˜๋ณต ๋ฐ ์ข…๋ฃŒ ์ œ์–ด
  • Calculator ํด๋ž˜์Šค
    ์‚ฌ์น™์—ฐ์‚ฐ ์ˆ˜ํ–‰, ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ปฌ๋ ‰์…˜์— ์ €์žฅ, ์ €์žฅ๋œ ๊ฒฐ๊ณผ ์‚ญ์ œ

Calculator ํด๋ž˜์Šค ๊ตฌํ˜„

Calculator ํด๋ž˜์Šค์˜ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์‚ฌ์น™์—ฐ์‚ฐ ์ˆ˜ํ–‰
  • ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
  • ์ €์žฅ๋œ ๊ฒฐ๊ณผ ๊ด€๋ฆฌ

์—ฐ์‚ฐ ๊ฒฐ๊ณผ ์ €์žฅ ์ปฌ๋ ‰์…˜

์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ˆ„์ ๋˜๊ธฐ ๋•Œ๋ฌธ์— List๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

private final List<Integer> results = new ArrayList<>();
  • private: App ํด๋ž˜์Šค์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œ
  • List: ๊ฒฐ๊ณผ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ
  • ArrayList: ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ List ๊ตฌํ˜„์ฒด

calculate ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

calculate ๋ฉ”์„œ๋“œ๋Š”
์—ฐ์‚ฐ ์ˆ˜ํ–‰ → ๊ฒฐ๊ณผ ์ €์žฅ → ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
์ด 3๊ฐ€์ง€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

public int calculate(int num1, int num2, char operator) {
    int result = 0;

    switch (operator) {
        case '+':
            result = num1 + num2;
            break;
        case '-':
            result = num1 - num2;
            break;
        case '*':
            result = num1 * num2;
            break;
        case '/':
            if (num2 == 0) {
                throw new IllegalArgumentException("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
            }
            result = num1 / num2;
            break;
        default:
            throw new IllegalArgumentException("์ง€์›ํ•˜์ง€ ์•Š๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.");
    }

    results.add(result);
    return result;
}

Step1์—์„œ๋Š” main ๋ฉ”์„œ๋“œ์—์„œ ์—ฐ์‚ฐ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ์ง€๋งŒ,
Step2์—์„œ๋Š” Calculator ํด๋ž˜์Šค๊ฐ€ ์ด๋ฅผ ๋‹ด๋‹นํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ๋‹ค.

์ž˜๋ชป๋œ ์—ฐ์‚ฐ์ž ์ž…๋ ฅ์ด๋‚˜ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์—๋Š”
IllegalArgumentException์„ ๋˜์ง€๊ณ ,
App ํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ๋ฐ›์•„ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค.


์บก์Аํ™” (getter, setter)

App ํด๋ž˜์Šค์—์„œ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ–ˆ๋‹ค.

public List<Integer> getResults() {
    return new ArrayList<>(results);
}

public void setResults(List<Integer> newResults) {
    results.clear();
    results.addAll(newResults);
}

์™ธ๋ถ€์—์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.


removeResult ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

์ €์žฅ๋œ ๊ฒฐ๊ณผ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ์ €์žฅ๋œ ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

public void removeResult() {
    if (!results.isEmpty()) {
        results.remove(0);
    }
}

๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์‚ญ์ œ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
isEmpty()๋กœ ํ•œ ๋ฒˆ ๋” ์ฒดํฌํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.


Calculator.java ์ „์ฒด ์ฝ”๋“œ

package com.example.calculator.step2;

import java.util.ArrayList;
import java.util.List;

public class Calculator {

    private final List<Integer> results = new ArrayList<>();

    public int calculate(int num1, int num2, char operator) {

        int result = 0;

        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if (num2 == 0) {
                    throw new IllegalArgumentException("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
                }
                result = num1 / num2;
                break;
            default:
                throw new IllegalArgumentException("์ง€์›ํ•˜์ง€ ์•Š๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.");
        }

        results.add(result);
        return result;
    }

    public List<Integer> getResults() {
        return new ArrayList<>(results);
    }

    public void setResults(List<Integer> newResults) {
        results.clear();
        results.addAll(newResults);
    }

    public void removeResult() {
        if (!results.isEmpty()) {
            results.remove(0);
        }
    }
}

App ํด๋ž˜์Šค ๊ตฌํ˜„

App ํด๋ž˜์Šค์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” Step1๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ–ˆ๋‹ค.
๋‹ฌ๋ผ์ง„ ์ ์€ ์—ฐ์‚ฐ์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ 
Calculator ํด๋ž˜์Šค์˜ calculate ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

Calculator calculator = new Calculator();

try {
    int result = calculator.calculate(num1, num2, operator);
    System.out.println("๊ฒฐ๊ณผ: " + result);
} catch (IllegalArgumentException e) {
    System.out.println("์˜ค๋ฅ˜: " + e.getMessage());
}

getter์™€ removeResult ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด
์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ํ™•์ธํ–ˆ๋‹ค.


App.java ์ „์ฒด ์ฝ”๋“œ

package com.example.calculator.step2;

import java.util.Scanner;

public class App {
    public static void main(String[] args) {

        Calculator calculator = new Calculator();
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.print("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:");
            int num1 = sc.nextInt();

            System.out.print("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:");
            int num2 = sc.nextInt();

            System.out.print("์‚ฌ์น™์—ฐ์‚ฐ ๊ธฐํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
            char operator = sc.next().charAt(0);

            try {
                int result = calculator.calculate(num1, num2, operator);
                System.out.println("๊ฒฐ๊ณผ: " + result);
            } catch (IllegalArgumentException e) {
                System.out.println("์˜ค๋ฅ˜: " + e.getMessage());
            }

            System.out.println("์ €์žฅ๋œ ๊ฒฐ๊ณผ ๋ชฉ๋ก: " + calculator.getResults());

            System.out.println("๊ฐ€์žฅ ๋จผ์ € ์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (remove ์ž…๋ ฅ ์‹œ ์‚ญ์ œ)");
            String cmd = sc.next();
            if (cmd.equalsIgnoreCase("remove")) {
                calculator.removeResult();
                System.out.println("์‚ญ์ œ ํ›„ ๊ฒฐ๊ณผ ๋ชฉ๋ก: " + calculator.getResults());
            }

            System.out.println("๋” ๊ณ„์‚ฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (exit ์ž…๋ ฅ ์‹œ ์ข…๋ฃŒ)");
            String answer = sc.next();

            if (answer.equals("exit")) break;
        }

        sc.close();
    }
}

๊ฒฐ๊ณผ

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ณด๋ฉด
์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ์ฐจ๋ก€๋Œ€๋กœ ์ €์žฅ๋˜๊ณ ,
remove๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ €์žฅ๋œ ๊ฐ’์ด ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๋‹ค์Œ Step3์—์„œ๋Š”
์‹ค์ˆ˜ ์—ฐ์‚ฐ, ๊ฒฐ๊ณผ ์กฐ๊ฑด ์กฐํšŒ, Enum๊ณผ ์ŠคํŠธ๋ฆผ ๋“ฑ์„ ์ ์šฉํ•˜๋ฉฐ
๊ณ„์‚ฐ๊ธฐ๋ฅผ ์กฐ๊ธˆ ๋” ํ™•์žฅํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.