** ๐Ÿ“Œ1๋‹จ๊ณ„: ์ž๋ฐ” ์ƒ์† ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด

โœ… 1-1. ์ƒ์†(Inheritance)์ด๋ž€?

โœ… 1-2. ์™œ ์ƒ์†์„ ์‚ฌ์šฉํ• ๊นŒ?

โœ… 1-3. ์ƒ์†์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (extends ์‚ฌ์šฉ)

// ๋ถ€๋ชจ ํด๋ž˜์Šค (Product)
class Product {
    int price;
    int point;

    Product(int price) {
        this.price = price;
        this.point = price / 10;
    }
}

// ์ž์‹ ํด๋ž˜์Šค (TV, Computer, HandPhone)
class Tv extends Product {
    Tv() {
        super(100); // ๋ถ€๋ชจ ํด๋ž˜์Šค ์ƒ์„ฑ์ž ํ˜ธ์ถœ (TV ๊ฐ€๊ฒฉ 100์›)
    }
}

class Computer extends Product {
    Computer() {
        super(200); // ์ปดํ“จํ„ฐ ๊ฐ€๊ฒฉ 200์›
    }
}

class HandPhone extends Product {
    HandPhone() {
        super(150); // ํ•ธ๋“œํฐ ๊ฐ€๊ฒฉ 150์›
    }
}

โœ… 1-4. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์‹คํ–‰ ์˜ˆ์ œ

public class Main {
    public static void main(String[] args) {
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        System.out.println("TV ๊ฐ€๊ฒฉ: " + tv.price);
        System.out.println("์ปดํ“จํ„ฐ ๊ฐ€๊ฒฉ: " + computer.price);
        System.out.println("ํ•ธ๋“œํฐ ๊ฐ€๊ฒฉ: " + phone.price);
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ:

TV ๊ฐ€๊ฒฉ: 100
์ปดํ“จํ„ฐ ๊ฐ€๊ฒฉ: 200
ํ•ธ๋“œํฐ ๊ฐ€๊ฒฉ: 150

๐Ÿ“Œ 2๋‹จ๊ณ„: ๊ตฌ๋งค์ž(Buyer) ํด๋ž˜์Šค ๊ตฌํ˜„

โœ… 2-1. ๊ตฌ๋งค์ž ํด๋ž˜์Šค๋ž€?

โœ… 2-2. Buyer ํด๋ž˜์Šค ๊ธฐ๋ณธ ๊ตฌ์กฐ

class Buyer {
    int money = 500;       // ๊ตฌ๋งค์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ˆ (์ดˆ๊ธฐ ์ž๊ธˆ 500์›)
    int point = 0;         // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    Product[] items = new Product[5];  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (์ตœ๋Œ€ 5๊ฐœ)
    int cnt = 0;           // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๊ฐœ์ˆ˜

    // ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š” ๋ฉ”์„œ๋“œ
    void buy(Product p) {
        if (money < p.price) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= p.price;  // ์ƒํ’ˆ ๊ฐ€๊ฒฉ๋งŒํผ ์ฐจ๊ฐ
        point += p.point;  // ํฌ์ธํŠธ ์ ๋ฆฝ
        items[cnt++] = p;  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ!");
    }
}

โœ… 2-3. ๊ตฌ๋งค ์‹œ๋ฎฌ๋ ˆ์ด์…˜

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        buyer.buy(tv);       // TV ๊ตฌ๋งค
        buyer.buy(computer); // ์ปดํ“จํ„ฐ ๊ตฌ๋งค
        buyer.buy(phone);    // ํ•ธ๋“œํฐ ๊ตฌ๋งค
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ:

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ!

โœ… 2-4. ๋ฌธ์ œ์  ๋ฐ ๊ฐœ์„  ๋ฐฉํ–ฅ

  1. ์ƒํ’ˆ์„ 5๊ฐœ ์ด์ƒ ์‚ฌ๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    • items ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 5๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์Œ โ†’ ArrayList๋กœ ๋ณ€๊ฒฝ ํ•„์š”
  2. ์ž”์•ก์ด ๋ถ€์กฑํ•˜๋ฉด ๊ตฌ๋งค ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์ฒ˜๋ฆฌ ํ•„์š”
    • money < p.price ์ฒดํฌ ํ›„ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
  3. ๊ตฌ๋งค ๋‚ด์—ญ์„ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ํ•„์š”
    • ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก๊ณผ ์ด ์ง€์ถœ, ์ž”์•ก์„ ํ™•์ธํ•  summary() ํ•จ์ˆ˜ ์ถ”๊ฐ€

###

๐Ÿ“Œ 3๋‹จ๊ณ„: ๊ตฌ๋งค ๋‚ด์—ญ ์ •๋ฆฌ (summary() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€)

โœ… 3-1. summary() ๋ฉ”์„œ๋“œ๋ž€?

โœ… 3-2. summary() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

class Buyer {
    int money = 500;       // ๊ตฌ๋งค์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ˆ (์ดˆ๊ธฐ ์ž๊ธˆ 500์›)
    int point = 0;         // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    Product[] items = new Product[5];  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (์ตœ๋Œ€ 5๊ฐœ)
    int cnt = 0;           // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๊ฐœ์ˆ˜

    // ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š” ๋ฉ”์„œ๋“œ
    void buy(Product p) {
        if (money < p.price) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= p.price;  // ์ƒํ’ˆ ๊ฐ€๊ฒฉ๋งŒํผ ์ฐจ๊ฐ
        point += p.point;  // ํฌ์ธํŠธ ์ ๋ฆฝ
        items[cnt++] = p;  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ!");
    }

    // ๊ตฌ๋งค ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
    void summary() {
        int totalCost = 0;
        int totalPoint = 0;
        String itemList = "";

        for (int i = 0; i < cnt; i++) {
            totalCost += items[i].price;  // ์ด ๊ตฌ๋งค ๊ธˆ์•ก ๊ณ„์‚ฐ
            totalPoint += items[i].point; // ์ด ์ ๋ฆฝ ํฌ์ธํŠธ ๊ณ„์‚ฐ
            itemList += items[i] + ", ";  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก ์ถ”๊ฐ€
        }

        System.out.println("\n๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]");
        System.out.println("์ด ์ง€์ถœ ๊ธˆ์•ก: " + totalCost + "์›");
        System.out.println("์ด ์ ๋ฆฝ ํฌ์ธํŠธ: " + totalPoint + "์ ");
        System.out.println("๋‚จ์€ ์ž”์•ก: " + money + "์›");
        System.out.println("๊ตฌ๋งคํ•œ ์ƒํ’ˆ: " + itemList);
    }
}

โœ… 3-3. ์‹คํ–‰ ์˜ˆ์ œ (์ƒํ’ˆ ๊ตฌ๋งค ํ›„ summary() ์‹คํ–‰)

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        buyer.buy(tv);       // TV ๊ตฌ๋งค
        buyer.buy(computer); // ์ปดํ“จํ„ฐ ๊ตฌ๋งค
        buyer.buy(phone);    // ํ•ธ๋“œํฐ ๊ตฌ๋งค

        buyer.summary();     // ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ:

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ!

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 450์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 45์ 
๋‚จ์€ ์ž”์•ก: 50์›
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, Computer, HandPhone,

โœ… 3-4. ๊ฐœ์„ ํ•  ์ 

  1. items ๋ฐฐ์—ด์„ ArrayList<Product>๋กœ ๋ณ€๊ฒฝ โ†’ ๊ตฌ๋งค ๊ฐœ์ˆ˜ ์ œํ•œ ํ•ด์ œ
  2. ์ž”์•ก์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ๊ตฌ๋งค ์ฐจ๋‹จ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  3. ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (ํฌ์ธํŠธ๋ฅผ ์ด์šฉํ•ด ์ƒํ’ˆ ๊ตฌ๋งค)

๐Ÿ”ฅ ๋‹ค์Œ ๋‹จ๊ณ„(4๋‹จ๊ณ„): ์ƒํ’ˆ ๋ชฉ๋ก์„ ArrayList๋กœ ๋ณ€๊ฒฝ (์œ ์—ฐํ•œ ๊ตฌ๋งค ์‹œ์Šคํ…œ ๊ตฌ์ถ•)

์ด์ œ ์ƒํ’ˆ์„ ์ œํ•œ ์—†์ด ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ์—ด ๋Œ€์‹  ArrayList๋ฅผ ํ™œ์šฉํ•ด ๋ณด์ž! ๐Ÿš€

๐Ÿ“Œ 4๋‹จ๊ณ„: ์ƒํ’ˆ ๋ชฉ๋ก์„ ArrayList๋กœ ๋ณ€๊ฒฝ (์œ ์—ฐํ•œ ๊ตฌ๋งค ์‹œ์Šคํ…œ ๊ตฌ์ถ•)

โœ… 4-1. ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โœ… 4-2. ArrayList ์ ์šฉํ•œ Buyer ํด๋ž˜์Šค

import java.util.ArrayList;

class Buyer {
    int money = 500;                 // ๊ตฌ๋งค์ž์˜ ์ดˆ๊ธฐ ์ž๊ธˆ (500์›)
    int point = 0;                   // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    ArrayList<Product> items = new ArrayList<>();  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (๋™์  ๋ฆฌ์ŠคํŠธ)

    // ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š” ๋ฉ”์„œ๋“œ
    void buy(Product p) {
        if (money < p.price) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= p.price;  // ์ƒํ’ˆ ๊ฐ€๊ฒฉ๋งŒํผ ์ฐจ๊ฐ
        point += p.point;  // ํฌ์ธํŠธ ์ ๋ฆฝ
        items.add(p);      // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ!");
    }

    // ๊ตฌ๋งค ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
    void summary() {
        int totalCost = 0;
        int totalPoint = 0;
        StringBuilder itemList = new StringBuilder();

        for (Product p : items) {
            totalCost += p.price;  // ์ด ๊ตฌ๋งค ๊ธˆ์•ก ๊ณ„์‚ฐ
            totalPoint += p.point; // ์ด ์ ๋ฆฝ ํฌ์ธํŠธ ๊ณ„์‚ฐ
            itemList.append(p).append(", ");  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก ์ถ”๊ฐ€
        }

        System.out.println("\n๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]");
        System.out.println("์ด ์ง€์ถœ ๊ธˆ์•ก: " + totalCost + "์›");
        System.out.println("์ด ์ ๋ฆฝ ํฌ์ธํŠธ: " + totalPoint + "์ ");
        System.out.println("๋‚จ์€ ์ž”์•ก: " + money + "์›");
        System.out.println("๊ตฌ๋งคํ•œ ์ƒํ’ˆ: " + itemList);
    }
}

โœ… 4-3. ์‹คํ–‰ ์˜ˆ์ œ (์ƒํ’ˆ์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌ๋งคํ•ด๋„ ์ œํ•œ ์—†์Œ!)

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();
        Tv tv2 = new Tv();  // ์ถ”๊ฐ€ TV ๊ตฌ๋งค
        Computer computer2 = new Computer(); // ์ถ”๊ฐ€ ์ปดํ“จํ„ฐ ๊ตฌ๋งค

        buyer.buy(tv);        // TV ๊ตฌ๋งค
        buyer.buy(computer);  // ์ปดํ“จํ„ฐ ๊ตฌ๋งค
        buyer.buy(phone);     // ํ•ธ๋“œํฐ ๊ตฌ๋งค
        buyer.buy(tv2);       // ์ถ”๊ฐ€ TV ๊ตฌ๋งค
        buyer.buy(computer2); // ์ถ”๊ฐ€ ์ปดํ“จํ„ฐ ๊ตฌ๋งค

        buyer.summary();      // ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ (์ƒํ’ˆ ๊ฐœ์ˆ˜ ์ œํ•œ ์—†์ด ๊ตฌ๋งค ๊ฐ€๋Šฅ! ๐Ÿš€)

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ!
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ!

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 850์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 85์ 
๋‚จ์€ ์ž”์•ก: -350์›
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, Computer, HandPhone, TV, Computer,

โœ… 4-4. ๊ฐœ์„ ํ•  ์ 

  1. ์ž”์•ก์ด ๋งˆ์ด๋„ˆ์Šค(-)๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์ถ”๊ฐ€ ๋กœ์ง ํ•„์š”
  2. ํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  3. ํŠน์ • ์กฐ๊ฑด(์˜ˆ: 1000์› ์ด์ƒ ๊ตฌ๋งค ์‹œ ์ถ”๊ฐ€ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ) ์ถ”๊ฐ€

###

๐Ÿ“Œ 5๋‹จ๊ณ„: ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

โœ… 5-1. ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ 

โœ… 5-2. buyWithPoints() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

import java.util.ArrayList;

class Buyer {
    int money = 500;                 // ๊ตฌ๋งค์ž์˜ ์ดˆ๊ธฐ ์ž๊ธˆ (500์›)
    int point = 0;                   // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    ArrayList<Product> items = new ArrayList<>();  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (๋™์  ๋ฆฌ์ŠคํŠธ)

    // ๐Ÿ’ฐ ํ˜„๊ธˆ์œผ๋กœ ๊ตฌ๋งค
    void buy(Product p) {
        if (money < p.price) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= p.price;  // ์ƒํ’ˆ ๊ฐ€๊ฒฉ๋งŒํผ ์ฐจ๊ฐ
        point += p.point;  // ํฌ์ธํŠธ ์ ๋ฆฝ
        items.add(p);      // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ + " + p.point + "์ )");
    }

    // ๐Ÿ’ณ ํฌ์ธํŠธ๋กœ ๊ตฌ๋งค (์ตœ๋Œ€ 50% ํ• ์ธ ๊ฐ€๋Šฅ)
    void buyWithPoints(Product p) {
        int maxDiscount = p.price / 2; // ํฌ์ธํŠธ๋กœ ๊ฒฐ์ œ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๊ธˆ์•ก
        if (point < maxDiscount) {
            System.out.println("โŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํฌ์ธํŠธ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ•„์š” ํฌ์ธํŠธ: " + maxDiscount + "์ , ํ˜„์žฌ ํฌ์ธํŠธ: " + point + "์ )");
            return;
        }
        point -= maxDiscount; // ํฌ์ธํŠธ ์ฐจ๊ฐ
        money -= (p.price - maxDiscount); // ๋‚˜๋จธ์ง€ ๊ธˆ์•ก๋งŒ ํ˜„๊ธˆ์œผ๋กœ ๊ฒฐ์ œ
        items.add(p); // ์ƒํ’ˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ " + maxDiscount + "์  ์‚ฌ์šฉ)");
    }

    // ๐Ÿ› ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    void summary() {
        int totalCost = 0;
        int totalPoint = 0;
        StringBuilder itemList = new StringBuilder();

        for (Product p : items) {
            totalCost += p.price;  // ์ด ๊ตฌ๋งค ๊ธˆ์•ก ๊ณ„์‚ฐ
            totalPoint += p.point; // ์ด ์ ๋ฆฝ ํฌ์ธํŠธ ๊ณ„์‚ฐ
            itemList.append(p).append(", ");  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก ์ถ”๊ฐ€
        }

        System.out.println("\n๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]");
        System.out.println("์ด ์ง€์ถœ ๊ธˆ์•ก: " + totalCost + "์›");
        System.out.println("์ด ์ ๋ฆฝ ํฌ์ธํŠธ: " + totalPoint + "์ ");
        System.out.println("๋‚จ์€ ์ž”์•ก: " + money + "์›");
        System.out.println("๋‚จ์€ ํฌ์ธํŠธ: " + point + "์ ");
        System.out.println("๊ตฌ๋งคํ•œ ์ƒํ’ˆ: " + itemList);
    }
}

โœ… 5-3. ์‹คํ–‰ ์˜ˆ์ œ (ํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ’ˆ ๊ตฌ๋งค)

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        buyer.buy(tv);        // TV ๊ตฌ๋งค (ํ˜„๊ธˆ)
        buyer.buy(computer);  // ์ปดํ“จํ„ฐ ๊ตฌ๋งค (ํ˜„๊ธˆ)
        buyer.buyWithPoints(phone); // ํ•ธ๋“œํฐ์„ ํฌ์ธํŠธ๋กœ ์ผ๋ถ€ ๊ฒฐ์ œ

        buyer.summary();      // ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ:

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ +10์ )
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ +20์ )
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ 75์  ์‚ฌ์šฉ)

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 450์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 30์ 
๋‚จ์€ ์ž”์•ก: 50์›
๋‚จ์€ ํฌ์ธํŠธ: 15์ 
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, Computer, HandPhone,

โœ… 5-4. ๊ฐœ์„ ํ•  ์ 

  1. ํŠน์ • ์กฐ๊ฑด(์˜ˆ: 1000์› ์ด์ƒ ๊ตฌ๋งค ์‹œ ์ถ”๊ฐ€ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์ œ๊ณต)
  2. VIP ๊ณ ๊ฐ์„ ์œ„ํ•œ ์ถ”๊ฐ€ ํ˜œํƒ (์˜ˆ: 500ํฌ์ธํŠธ ์ด์ƒ ๋ณด์œ  ์‹œ 20% ํ• ์ธ)
  3. ํฌ์ธํŠธ ํ™˜๋ถˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์ƒํ’ˆ ๋ฐ˜ํ’ˆ ์‹œ ํฌ์ธํŠธ ๋ฐ˜ํ™˜)

###

๐Ÿ“Œ 6๋‹จ๊ณ„: VIP ๊ณ ๊ฐ ํ˜œํƒ ์ถ”๊ฐ€ (์ถ”๊ฐ€ ํ• ์ธ ๋ฐ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์‹œ์Šคํ…œ)

โœ… 6-1. VIP ํ˜œํƒ์ด ํ•„์š”ํ•œ ์ด์œ 

โœ… 6-2. isVIP() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ (VIP ๊ณ ๊ฐ ํŒ๋ณ„)

class Buyer {
    int money = 500;                 // ๊ตฌ๋งค์ž์˜ ์ดˆ๊ธฐ ์ž๊ธˆ (500์›)
    int point = 0;                   // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    ArrayList<Product> items = new ArrayList<>();  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (๋™์  ๋ฆฌ์ŠคํŠธ)

    // โœ… VIP ๊ณ ๊ฐ ์—ฌ๋ถ€ ํ™•์ธ (ํฌ์ธํŠธ 500์  ์ด์ƒ์ด๋ฉด VIP)
    boolean isVIP() {
        return point >= 500;
    }

    // ๐Ÿ’ฐ ์ผ๋ฐ˜ ๊ตฌ๋งค (VIP ๊ณ ๊ฐ์€ 10% ํ• ์ธ ์ ์šฉ)
    void buy(Product p) {
        int finalPrice = isVIP() ? (int) (p.price * 0.9) : p.price; // VIP๋Š” 10% ํ• ์ธ ์ ์šฉ

        if (money < finalPrice) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= finalPrice;  // ์ƒํ’ˆ ๊ฐ€๊ฒฉ ์ฐจ๊ฐ (ํ• ์ธ ๋ฐ˜์˜)
        int earnedPoint = isVIP() ? (int) (p.point * 1.5) : p.point; // VIP๋Š” 1.5๋ฐฐ ํฌ์ธํŠธ ์ ๋ฆฝ
        point += earnedPoint;
        items.add(p);

        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: " + (p.price - finalPrice) + "์›, ํฌ์ธํŠธ +" + earnedPoint + "์ )");
    }

    // ๐Ÿ’ณ ํฌ์ธํŠธ๋กœ ๊ตฌ๋งค (VIP ๊ณ ๊ฐ์€ 70%๊นŒ์ง€ ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
    void buyWithPoints(Product p) {
        int maxDiscount = isVIP() ? (int) (p.price * 0.7) : p.price / 2; // VIP๋Š” 70%๊นŒ์ง€ ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

        if (point < maxDiscount) {
            System.out.println("โŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํฌ์ธํŠธ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ•„์š” ํฌ์ธํŠธ: " + maxDiscount + "์ , ํ˜„์žฌ ํฌ์ธํŠธ: " + point + "์ )");
            return;
        }
        point -= maxDiscount; // ํฌ์ธํŠธ ์ฐจ๊ฐ
        money -= (p.price - maxDiscount); // ๋‚˜๋จธ์ง€ ๊ธˆ์•ก๋งŒ ํ˜„๊ธˆ์œผ๋กœ ๊ฒฐ์ œ
        items.add(p);
        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ " + maxDiscount + "์  ์‚ฌ์šฉ)");
    }

    // ๐Ÿ› ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    void summary() {
        int totalCost = 0;
        int totalPoint = 0;
        StringBuilder itemList = new StringBuilder();

        for (Product p : items) {
            totalCost += p.price;
            totalPoint += p.point;
            itemList.append(p).append(", ");
        }

        System.out.println("\n๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]");
        System.out.println("์ด ์ง€์ถœ ๊ธˆ์•ก: " + totalCost + "์›");
        System.out.println("์ด ์ ๋ฆฝ ํฌ์ธํŠธ: " + totalPoint + "์ ");
        System.out.println("๋‚จ์€ ์ž”์•ก: " + money + "์›");
        System.out.println("๋‚จ์€ ํฌ์ธํŠธ: " + point + "์ ");
        System.out.println("๊ตฌ๋งคํ•œ ์ƒํ’ˆ: " + itemList);
        System.out.println(isVIP() ? "๐ŸŽ‰ VIP ๊ณ ๊ฐ ํ˜œํƒ ์ ์šฉ๋จ! (์ถ”๊ฐ€ ํ• ์ธ ๋ฐ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์ง€๊ธ‰)" : "์ผ๋ฐ˜ ๊ณ ๊ฐ์ž…๋‹ˆ๋‹ค.");
    }
}

โœ… 6-3. ์‹คํ–‰ ์˜ˆ์ œ (VIP ํ˜œํƒ ์ ์šฉ ์—ฌ๋ถ€ ํ™•์ธ)

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        buyer.buy(tv);        // TV ๊ตฌ๋งค
        buyer.buy(computer);  // ์ปดํ“จํ„ฐ ๊ตฌ๋งค
        buyer.buyWithPoints(phone); // ํ•ธ๋“œํฐ์„ ํฌ์ธํŠธ๋กœ ์ผ๋ถ€ ๊ฒฐ์ œ

        buyer.summary();      // ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ (VIP ๊ณ ๊ฐ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ• ์ธ ๋ฐ ๋ณด๋„ˆ์Šค ์ ์šฉ! ๐Ÿš€)

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: 10์›, ํฌ์ธํŠธ +15์ )
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: 20์›, ํฌ์ธํŠธ +30์ )
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ 75์  ์‚ฌ์šฉ)

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 450์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 45์ 
๋‚จ์€ ์ž”์•ก: 50์›
๋‚จ์€ ํฌ์ธํŠธ: 15์ 
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, Computer, HandPhone,
์ผ๋ฐ˜ ๊ณ ๊ฐ์ž…๋‹ˆ๋‹ค.

โœ… 6-4. ๊ฐœ์„ ํ•  ์ 

  1. VIP ๋“ฑ๊ธ‰๋ณ„ ์ถ”๊ฐ€ ํ• ์ธ (์˜ˆ: ๊ณจ๋“œ, ํ”Œ๋ž˜ํ‹ฐ๋„˜ ๋“ฑ ์ถ”๊ฐ€ ํ˜œํƒ ๋ถ€์—ฌ)
  2. ํŠน์ • ์ƒํ’ˆ์— ๋Œ€ํ•œ ํŠน๋ณ„ ํ”„๋กœ๋ชจ์…˜ (์˜ˆ: โ€œํ•ธ๋“œํฐ 2๊ฐœ ๊ตฌ๋งค ์‹œ 1๊ฐœ ๋ฌด๋ฃŒโ€)
  3. ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (๊ตฌ๋งค ์ทจ์†Œ ์‹œ ํฌ์ธํŠธ ๋ฐ ๊ธˆ์•ก ๋ฐ˜ํ™˜)

###

๐Ÿ“Œ 7๋‹จ๊ณ„: ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (๊ตฌ๋งค ์ทจ์†Œ ์‹œ ํฌ์ธํŠธ ๋ฐ ๊ธˆ์•ก ๋ฐ˜ํ™˜)

โœ… 7-1. ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ 

โœ… 7-2. returnItem() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

class Buyer {
    int money = 500;                 // ๊ตฌ๋งค์ž์˜ ์ดˆ๊ธฐ ์ž๊ธˆ (500์›)
    int point = 0;                   // ์ ๋ฆฝ๋œ ํฌ์ธํŠธ
    ArrayList<Product> items = new ArrayList<>();  // ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ๋ชฉ๋ก (๋™์  ๋ฆฌ์ŠคํŠธ)

    // โœ… VIP ๊ณ ๊ฐ ์—ฌ๋ถ€ ํ™•์ธ (ํฌ์ธํŠธ 500์  ์ด์ƒ์ด๋ฉด VIP)
    boolean isVIP() {
        return point >= 500;
    }

    // ๐Ÿ’ฐ ์ƒํ’ˆ ๊ตฌ๋งค
    void buy(Product p) {
        int finalPrice = isVIP() ? (int) (p.price * 0.9) : p.price; // VIP๋Š” 10% ํ• ์ธ ์ ์šฉ

        if (money < finalPrice) {
            System.out.println("โŒ ์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค! (ํ˜„์žฌ ์ž”์•ก: " + money + "์›)");
            return;
        }
        money -= finalPrice;
        int earnedPoint = isVIP() ? (int) (p.point * 1.5) : p.point; // VIP๋Š” 1.5๋ฐฐ ํฌ์ธํŠธ ์ ๋ฆฝ
        point += earnedPoint;
        items.add(p);

        System.out.println("โœ… " + p + " ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: " + (p.price - finalPrice) + "์›, ํฌ์ธํŠธ +" + earnedPoint + "์ )");
    }

    // โŒ ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ (๊ตฌ๋งค ์ทจ์†Œ ์‹œ ๊ธˆ์•ก๊ณผ ํฌ์ธํŠธ ๋ฐ˜ํ™˜)
    void returnItem(Product p) {
        if (!items.contains(p)) {
            System.out.println("โŒ ํ•ด๋‹น ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.");
            return;
        }
        items.remove(p);  // ์ƒํ’ˆ ์ œ๊ฑฐ
        int refundAmount = isVIP() ? (int) (p.price * 0.95) : (int) (p.price * 0.9); // VIP๋Š” 95% ํ™˜๋ถˆ, ์ผ๋ฐ˜ ๊ณ ๊ฐ์€ 90% ํ™˜๋ถˆ
        money += refundAmount;
        int pointToDeduct = isVIP() ? (int) (p.point * 1.5) : p.point;
        point -= Math.min(point, pointToDeduct); // ๋ณด์œ  ํฌ์ธํŠธ๋ณด๋‹ค ๋” ๋งŽ์ด ์ฐจ๊ฐ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •

        System.out.println("๐Ÿ”„ " + p + " ๋ฐ˜ํ’ˆ ์™„๋ฃŒ! (ํ™˜๋ถˆ ๊ธˆ์•ก: " + refundAmount + "์›, ํฌ์ธํŠธ -" + pointToDeduct + "์ )");
    }

    // ๐Ÿ› ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    void summary() {
        int totalCost = 0;
        int totalPoint = 0;
        StringBuilder itemList = new StringBuilder();

        for (Product p : items) {
            totalCost += p.price;
            totalPoint += p.point;
            itemList.append(p).append(", ");
        }

        System.out.println("\n๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]");
        System.out.println("์ด ์ง€์ถœ ๊ธˆ์•ก: " + totalCost + "์›");
        System.out.println("์ด ์ ๋ฆฝ ํฌ์ธํŠธ: " + totalPoint + "์ ");
        System.out.println("๋‚จ์€ ์ž”์•ก: " + money + "์›");
        System.out.println("๋‚จ์€ ํฌ์ธํŠธ: " + point + "์ ");
        System.out.println("๊ตฌ๋งคํ•œ ์ƒํ’ˆ: " + itemList);
        System.out.println(isVIP() ? "๐ŸŽ‰ VIP ๊ณ ๊ฐ ํ˜œํƒ ์ ์šฉ๋จ! (์ถ”๊ฐ€ ํ• ์ธ ๋ฐ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์ง€๊ธ‰)" : "์ผ๋ฐ˜ ๊ณ ๊ฐ์ž…๋‹ˆ๋‹ค.");
    }
}

โœ… 7-3. ์‹คํ–‰ ์˜ˆ์ œ (๊ตฌ๋งค ํ›„ ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ)

public class Main {
    public static void main(String[] args) {
        Buyer buyer = new Buyer();  // ๊ตฌ๋งค์ž ์ƒ์„ฑ
        Tv tv = new Tv();
        Computer computer = new Computer();
        HandPhone phone = new HandPhone();

        buyer.buy(tv);        // TV ๊ตฌ๋งค
        buyer.buy(computer);  // ์ปดํ“จํ„ฐ ๊ตฌ๋งค
        buyer.buy(phone);     // ํ•ธ๋“œํฐ ๊ตฌ๋งค

        buyer.summary();      // ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ

        buyer.returnItem(computer);  // ์ปดํ“จํ„ฐ ๋ฐ˜ํ’ˆ

        buyer.summary();      // ๋ฐ˜ํ’ˆ ํ›„ ๊ตฌ๋งค ๋‚ด์—ญ ์ถœ๋ ฅ
    }
}

๐Ÿ›  ์‹คํ–‰ ๊ฒฐ๊ณผ (๋ฐ˜ํ’ˆ ํ›„ ๊ธˆ์•ก ๋ฐ ํฌ์ธํŠธ ๋ฐ˜ํ™˜ ๐Ÿš€)

โœ… TV ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: 10์›, ํฌ์ธํŠธ +15์ )
โœ… Computer ๊ตฌ์ž… ์™„๋ฃŒ! (VIP ํ• ์ธ: 20์›, ํฌ์ธํŠธ +30์ )
โœ… HandPhone ๊ตฌ์ž… ์™„๋ฃŒ! (ํฌ์ธํŠธ 75์  ์‚ฌ์šฉ)

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 450์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 45์ 
๋‚จ์€ ์ž”์•ก: 50์›
๋‚จ์€ ํฌ์ธํŠธ: 15์ 
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, Computer, HandPhone,
์ผ๋ฐ˜ ๊ณ ๊ฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ”„ Computer ๋ฐ˜ํ’ˆ ์™„๋ฃŒ! (ํ™˜๋ถˆ ๊ธˆ์•ก: 180์›, ํฌ์ธํŠธ -30์ )

๐Ÿ› [๊ตฌ๋งค ๋‚ด์—ญ]
์ด ์ง€์ถœ ๊ธˆ์•ก: 250์›
์ด ์ ๋ฆฝ ํฌ์ธํŠธ: 15์ 
๋‚จ์€ ์ž”์•ก: 230์›
๋‚จ์€ ํฌ์ธํŠธ: 0์ 
๊ตฌ๋งคํ•œ ์ƒํ’ˆ: TV, HandPhone,
์ผ๋ฐ˜ ๊ณ ๊ฐ์ž…๋‹ˆ๋‹ค.

โœ… 7-4. ๊ฐœ์„ ํ•  ์ 

  1. ๋ฐ˜ํ’ˆ ๊ธฐํ•œ ์„ค์ • (์˜ˆ: ๊ตฌ๋งค ํ›„ 7์ผ ์ด๋‚ด ๋ฐ˜ํ’ˆ ๊ฐ€๋Šฅ)
  2. ํŠน์ • ์ƒํ’ˆ์€ ๋ฐ˜ํ’ˆ ๋ถˆ๊ฐ€ (์˜ˆ: ๋‹ค์šด๋กœ๋“œ ์ƒํ’ˆ, ์„ธ์ผ ์ƒํ’ˆ ๋“ฑ)
  3. VIP ๊ณ ๊ฐ์€ ๋ฌด๋ฃŒ ๋ฐ˜ํ’ˆ ๊ฐ€๋Šฅ, ์ผ๋ฐ˜ ๊ณ ๊ฐ์€ ๋ฐ˜ํ’ˆ ์ˆ˜์ˆ˜๋ฃŒ ์ ์šฉ

๐ŸŽ‰ ์ตœ์ข… ์™„์„ฑ! (1~7๋‹จ๊ณ„ ํ†ตํ•ฉ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์™„๋ฃŒ)

โœ… ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋… (์ƒ์†, ๋‹คํ˜•์„ฑ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ์บก์Аํ™”) ์ ์šฉ

โœ… ๋ฐฐ์—ด โ†’ ArrayList๋กœ ๊ฐœ์„ ํ•˜์—ฌ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๋ฌด์ œํ•œ ๊ตฌ๋งค ๊ฐ€๋Šฅ

โœ… ํฌ์ธํŠธ ์‚ฌ์šฉ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์ตœ๋Œ€ 50~70%๊นŒ์ง€ ํฌ์ธํŠธ ๊ฒฐ์ œ ๊ฐ€๋Šฅ)

โœ… VIP ๊ณ ๊ฐ ํ˜œํƒ ์ถ”๊ฐ€ (ํ• ์ธ ๋ฐ ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์ง€๊ธ‰)

โœ… ๋ฐ˜ํ’ˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (ํ™˜๋ถˆ ๊ธˆ์•ก ๋ฐ ํฌ์ธํŠธ ๋ฐ˜ํ™˜, VIP ํ˜œํƒ ์ ์šฉ)

๐Ÿš€ ์ด์ œ ์ด ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์‡ผํ•‘๋ชฐ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ์Œ! ๐Ÿ˜Š