** ๐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์
}
}
super(100)
: ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ ํธ์ถTv
ํด๋์ค๋Product
๋ฅผ ์์๋ฐ์ ๊ฐ๊ฒฉ๊ณผ ํฌ์ธํธ๋ฅผ ์๋์ผ๋ก ์ค์
โ 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. ๊ตฌ๋งค์ ํด๋์ค๋?
- ์ํ์ ๊ตฌ๋งคํ๋ ์ฃผ์ฒด(์ฌ์ฉ์)
- ๋(
money
), ํฌ์ธํธ(point
), ๊ตฌ๋งคํ ์ํ ๋ชฉ๋ก(items
)์ ๊ด๋ฆฌ buy(Product p)
: ์ํ ๊ตฌ๋งค ์ ์์ก ์ฐจ๊ฐ, ํฌ์ธํธ ์ ๋ฆฝ, ๋ชฉ๋ก ์ ์ฅ
โ 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. ๋ฌธ์ ์ ๋ฐ ๊ฐ์ ๋ฐฉํฅ
- ์ํ์ 5๊ฐ ์ด์ ์ฌ๋ฉด ์ค๋ฅ ๋ฐ์
items
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 5๋ก ๊ณ ์ ๋์ด ์์ โArrayList
๋ก ๋ณ๊ฒฝ ํ์
- ์์ก์ด ๋ถ์กฑํ๋ฉด ๊ตฌ๋งค ๋ถ๊ฐํ๋๋ก ์ฒ๋ฆฌ ํ์
money < p.price
์ฒดํฌ ํ ๋ฉ์์ง ์ถ๋ ฅ
- ๊ตฌ๋งค ๋ด์ญ์ ๋ณด๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ ํ์
- ๊ตฌ๋งคํ ์ํ ๋ชฉ๋ก๊ณผ ์ด ์ง์ถ, ์์ก์ ํ์ธํ
summary()
ํจ์ ์ถ๊ฐ
- ๊ตฌ๋งคํ ์ํ ๋ชฉ๋ก๊ณผ ์ด ์ง์ถ, ์์ก์ ํ์ธํ
###
๐ 3๋จ๊ณ: ๊ตฌ๋งค ๋ด์ญ ์ ๋ฆฌ (summary()
๋ฉ์๋ ์ถ๊ฐ)
โ
3-1. summary()
๋ฉ์๋๋?
- ๊ตฌ๋งคํ ์ํ ๋ชฉ๋ก์ ์ ๋ฆฌํ์ฌ ์ด ์ง์ถ ๊ธ์ก, ์ ๋ฆฝ ํฌ์ธํธ, ๋จ์ ์์ก์ ์ถ๋ ฅ
items
๋ฐฐ์ด์ ์ ์ฅ๋ ์ํ ์ ๋ณด๋ฅผ ์ํํ๋ฉฐ ๊ณ์ฐ
โ
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. ๊ฐ์ ํ ์
items
๋ฐฐ์ด์ArrayList<Product>
๋ก ๋ณ๊ฒฝ โ ๊ตฌ๋งค ๊ฐ์ ์ ํ ํด์ ์์ก์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ๊ตฌ๋งค ์ฐจ๋จ
๊ธฐ๋ฅ ์ถ๊ฐํฌ์ธํธ ์ฌ์ฉ ๊ธฐ๋ฅ
์ถ๊ฐ (ํฌ์ธํธ๋ฅผ ์ด์ฉํด ์ํ ๊ตฌ๋งค)
๐ฅ ๋ค์ ๋จ๊ณ(4๋จ๊ณ): ์ํ ๋ชฉ๋ก์ ArrayList
๋ก ๋ณ๊ฒฝ (์ ์ฐํ ๊ตฌ๋งค ์์คํ
๊ตฌ์ถ)
์ด์ ์ํ์ ์ ํ ์์ด ๊ตฌ๋งคํ ์ ์๋๋ก ๋ฐฐ์ด ๋์ ArrayList
๋ฅผ ํ์ฉํด ๋ณด์! ๐
๐ 4๋จ๊ณ: ์ํ ๋ชฉ๋ก์ ArrayList
๋ก ๋ณ๊ฒฝ (์ ์ฐํ ๊ตฌ๋งค ์์คํ
๊ตฌ์ถ)
โ
4-1. ArrayList
๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๊ธฐ์กด
items
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 5๋ก ๊ณ ์ ๋์ด ์์ โ ๋ ๋ง์ ์ํ์ ์ฌ๋ฉด ์ค๋ฅ ๋ฐ์! ArrayList<Product>
๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋จ โ ๋ ์ ์ฐํ ๊ตฌ๋งค ๊ฐ๋ฅ
โ
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. ๊ฐ์ ํ ์
- ์์ก์ด ๋ง์ด๋์ค(-)๊ฐ ๋์ง ์๋๋ก ์ถ๊ฐ ๋ก์ง ํ์
- ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ ๊ตฌ๋งคํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ
- ํน์ ์กฐ๊ฑด(์: 1000์ ์ด์ ๊ตฌ๋งค ์ ์ถ๊ฐ ๋ณด๋์ค ํฌ์ธํธ) ์ถ๊ฐ
###
๐ 5๋จ๊ณ: ํฌ์ธํธ ์ฌ์ฉ ๊ธฐ๋ฅ ์ถ๊ฐ
โ 5-1. ํฌ์ธํธ ์ฌ์ฉ ๊ธฐ๋ฅ์ด ํ์ํ ์ด์
- ๊ธฐ์กด ์์คํ ์์๋ ํฌ์ธํธ๋ฅผ ์ ๋ฆฝ๋ง ํ๊ณ ์ฌ์ฉํ์ง ์์.
- ํฌ์ธํธ๋ฅผ ํ์ฉํ์ฌ ์ผ๋ถ ์ํ์ ํ ์ธ๋ฐ๊ฑฐ๋ ๋ฌด๋ฃ๋ก ๊ตฌ๋งค ๊ฐ๋ฅํ๋๋ก ๊ฐ์ .
- ์์ : ํฌ์ธํธ๋ก
์ํ ๊ฐ๊ฒฉ์ ์ต๋ 50%๊น์ง ๊ฒฐ์ ๊ฐ๋ฅ
ํ๋๋ก ์ค์ .
โ
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. ๊ฐ์ ํ ์
- ํน์ ์กฐ๊ฑด(์: 1000์ ์ด์ ๊ตฌ๋งค ์ ์ถ๊ฐ ๋ณด๋์ค ํฌ์ธํธ ์ ๊ณต)
- VIP ๊ณ ๊ฐ์ ์ํ ์ถ๊ฐ ํํ (์: 500ํฌ์ธํธ ์ด์ ๋ณด์ ์ 20% ํ ์ธ)
- ํฌ์ธํธ ํ๋ถ ๊ธฐ๋ฅ ์ถ๊ฐ (์ํ ๋ฐํ ์ ํฌ์ธํธ ๋ฐํ)
###
๐ 6๋จ๊ณ: VIP ๊ณ ๊ฐ ํํ ์ถ๊ฐ (์ถ๊ฐ ํ ์ธ ๋ฐ ๋ณด๋์ค ํฌ์ธํธ ์์คํ )
โ 6-1. VIP ํํ์ด ํ์ํ ์ด์
- ์ผ๋ฐ ๊ณ ๊ฐ๊ณผ VIP ๊ณ ๊ฐ์ ๊ตฌ๋ถํ์ฌ ์ฐจ๋ณํ๋ ํํ ์ ๊ณต
- VIP ๊ณ ๊ฐ (500ํฌ์ธํธ ์ด์ ๋ณด์ ) โ ์ถ๊ฐ ํ ์ธ ๋ฐ ๋ณด๋์ค ํฌ์ธํธ ์ง๊ธ
- ๋ ๋ง์ ์ํ์ ๊ตฌ๋งคํ๋๋ก ์ ๋ํ๋ ๋ง์ผํ ์ ๋ต
โ
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. ๊ฐ์ ํ ์
- VIP ๋ฑ๊ธ๋ณ ์ถ๊ฐ ํ ์ธ (์: ๊ณจ๋, ํ๋ํฐ๋ ๋ฑ ์ถ๊ฐ ํํ ๋ถ์ฌ)
- ํน์ ์ํ์ ๋ํ ํน๋ณ ํ๋ก๋ชจ์ (์: โํธ๋ํฐ 2๊ฐ ๊ตฌ๋งค ์ 1๊ฐ ๋ฌด๋ฃโ)
- ๋ฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (๊ตฌ๋งค ์ทจ์ ์ ํฌ์ธํธ ๋ฐ ๊ธ์ก ๋ฐํ)
###
๐ 7๋จ๊ณ: ๋ฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (๊ตฌ๋งค ์ทจ์ ์ ํฌ์ธํธ ๋ฐ ๊ธ์ก ๋ฐํ)
โ 7-1. ๋ฐํ ๊ธฐ๋ฅ์ด ํ์ํ ์ด์
- ์ฌ์ฉ์๊ฐ ๊ตฌ๋งคํ ์ํ์ ์ทจ์ํ ์ ์๋๋ก ๊ธฐ๋ฅ ์ถ๊ฐ
- ๊ตฌ๋งคํ ์ํ์ ๋ฐํํ๋ฉด, ์ฌ์ฉํ ๋๊ณผ ์ ๋ฆฝ๋ ํฌ์ธํธ๋ฅผ ๋๋ ค๋ฐ์
- VIP ๊ณ ๊ฐ์ ๋ฐํ ์์๋ ์ถ๊ฐ ํํ ์ ์ฉ (์: ์์๋ฃ ๋ฉด์ )
โ
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. ๊ฐ์ ํ ์
- ๋ฐํ ๊ธฐํ ์ค์ (์: ๊ตฌ๋งค ํ 7์ผ ์ด๋ด ๋ฐํ ๊ฐ๋ฅ)
- ํน์ ์ํ์ ๋ฐํ ๋ถ๊ฐ (์: ๋ค์ด๋ก๋ ์ํ, ์ธ์ผ ์ํ ๋ฑ)
- VIP ๊ณ ๊ฐ์ ๋ฌด๋ฃ ๋ฐํ ๊ฐ๋ฅ, ์ผ๋ฐ ๊ณ ๊ฐ์ ๋ฐํ ์์๋ฃ ์ ์ฉ
๐ ์ต์ข ์์ฑ! (1~7๋จ๊ณ ํตํฉ ์์คํ ๊ตฌ์ถ ์๋ฃ)
โ ๊ฐ์ฒด์งํฅ ๊ฐ๋ (์์, ๋คํ์ฑ, ์ค๋ฒ๋ผ์ด๋ฉ, ์บก์ํ) ์ ์ฉ
โ
๋ฐฐ์ด โ ArrayList
๋ก ๊ฐ์ ํ์ฌ ์ํ ๊ฐ์ ๋ฌด์ ํ ๊ตฌ๋งค ๊ฐ๋ฅ
โ ํฌ์ธํธ ์ฌ์ฉ ๊ธฐ๋ฅ ์ถ๊ฐ (์ต๋ 50~70%๊น์ง ํฌ์ธํธ ๊ฒฐ์ ๊ฐ๋ฅ)
โ VIP ๊ณ ๊ฐ ํํ ์ถ๊ฐ (ํ ์ธ ๋ฐ ๋ณด๋์ค ํฌ์ธํธ ์ง๊ธ)
โ ๋ฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (ํ๋ถ ๊ธ์ก ๋ฐ ํฌ์ธํธ ๋ฐํ, VIP ํํ ์ ์ฉ)
๐ ์ด์ ์ด ์ฝ๋๋ฅผ ํ์ฉํ์ฌ ์ค์ ์ผํ๋ชฐ ์์คํ ์ ๊ฐ๋ฐํ ์๋ ์์! ๐