728x90
반응형
[Java] 배열, 업/다운 캐스팅, 다형성 활용 : 인형 뽑기 프로그램 만들기
1. ToyMachine/Product 클래스를 생성해라.
-ToyMachine 클래스에 Product 클래스의 객체를 받는 배열을 멤버변수로 생성해라.
2. Product 클래스의 자녀 클래스들을 생성해라.
3. ToyMachine/Product/Product의 자녀 클래스들을 활용해, 인형뽑기 프로그램을 생성해라.
4. 업캐스팅/다운캐스팅의 개념을 응용해 새로운 기능을 만들어보자.
풀이 과정
1. ToyMachine/Product 클래스를 생성해라.
-ToyMachine 클래스에 Product 클래스의 객체를 받는 배열을 멤버변수로 생성해라.
2. Product 클래스의 자녀 클래스들을 생성해라.
-인형 뽑기 기계에 들어갈 만한 것들을 생각해보자. (ex: Doll, Toy, Gadget ...)
-각각의 클래스들은 Product 클래스를 부모 클래스로 상속 받는다.
3. ToyMachine/Product/Product의 자녀 클래스들을 활용해, 인형뽑기 프로그램을 생성해라.
-addProduct() 메서드를 사용해, ToyMachine의 멤버 변수인 배열에 객체를 넣을 수 있게 만들어라.
public void addProduct(Product product) {
// 0 < 4
if (have < MAX_NUMBER){
products[have]=product; have++;
}
}
4. 업캐스팅/다운캐스팅의 개념을 응용해 새로운 기능을 만들어보자.
예시: Random 클래스를 이용한 랜덤 인형 뽑기 / product 배열의 정보 출력하기 / 꽝-당첨 출력하기 등등
(1) ToyMachineTest
package basic.exercise.Toy;
public class ToyMachineTest {
public static void main(String[] args) {
Product rabitDoll = new Doll("토끼 인형");
Product lionDoll = new Doll("사자 인형");
Product BearDoll = new Doll("곰 인형");
Product iPhone = new Gadget("아이폰");
Product iPot = new Gadget("아이팟");
System.out.println("------------");
ToyMachine newMachine = new ToyMachine();
newMachine.addProduct(rabitDoll);
newMachine.addProduct(lionDoll);
newMachine.addProduct(BearDoll);
newMachine.addProduct(iPhone);
newMachine.addProduct(iPot);
newMachine.start();
System.out.println("------------");
((Doll)newMachine.getProducts()[0]).check();
((Doll)newMachine.getProducts()[1]).check();
((Gadget)newMachine.getProducts()[3]).check();
}
}
(2) ToyMachine 클래스
package basic.exercise.Toy;
import java.util.Random;
// 인형 뽑기 설계하기
// 상품들이 존재 가능
// 사자 인형, 곰 인형, 에어팟
// 요구 조건
// 배열을 활용해서 객체들을 담아주세요
public class ToyMachine {
private int have = 0;
private int tryNumber = 0;
private final int MAX_NUMBER = 4;
private Product[] products;
public Product[] getProducts() {
return products;
}
public void setProducts(Product[] products) {
this.products = products;
}
public ToyMachine() {
products = new Product[MAX_NUMBER];
}
public void addProduct(Product product) {
// 0 < 4
if (have < MAX_NUMBER) {
products[have]=product;
have++;
}
}
public void start() {
System.out.println("인형뽑기를 시작합니다.");
Random random = new Random();
int i = random.nextInt(3) + 1;
int num = random.nextInt(10);
System.out.println(products[i].name+"이 나왔습니다.");
if(num==4) {
fail();
}
else if(num==7) {
lucky();
}
}
public void fail() {
System.out.println("앗!");
Random random = new Random();
int i = random.nextInt(3) + 1;
System.out.println("상품을 중간에 놓쳐버렸다!");
}
public void lucky() {
System.out.println("럭키!");
Random random = new Random();
int i1 = random.nextInt(3) + 1;
System.out.println(products[i1].name+"를 함께 뽑았다!");
}
}
(3) Product 클래스 파일
package basic.exercise.Toy;
public class Product {
String name;
int price;
public Product(String name) {
this.name = name;
}
public void check() {}
}
(4) Doll 클래스 파일
package basic.exercise.Toy;
import java.util.Random;
public class Doll extends Product {
public Doll(String name) {
super(name);
}
public void getDoll() {
System.out.println("축하합니다, " + this.name + "인형을 뽑았습니다!");
}
public void check() {
Random random=new Random();
int a=random.nextInt(2);
if(a==0) {
System.out.println("먼지가 쌓이고 실이 삭았다. 새걸로 교체해주자.");
}
else {
System.out.println("아직 새 것처럼 예쁜 인형이다.");
}
}
}
(5) Gadget 클래스 파일
package basic.exercise.Toy;
import java.util.Random;
public class Gadget extends Product {
public Gadget(String name) {
super(name);
}
public void getGadet() {
System.out.println("축하합니다, " + "기계를 뽑았습니다!");
}
public void check() {
Random random=new Random();
int a=random.nextInt(2);
if(a==0) {
System.out.println("슬슬 이것도 바꿀 때가 된 것 같다.");
}
else {
System.out.println("넣은 지 오래 된 기계인데도, 아직 튼튼하다.");
}
}
}
728x90
반응형
'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 47. 추상 클래스 활용: 클래스 구현하기 (0) | 2024.04.24 |
---|---|
[Java] 46. 추상 클래스 (0) | 2024.04.24 |
[Java] 44. 다형성 활용: 스타크래프트 소스 코드 수정하기 (0) | 2024.04.24 |
[Java] 43. 다형성과 캐스팅 (0) | 2024.04.24 |
[Java] 42. 연관 관계 활용: 학생과 학급 클래스 만들기 (0) | 2024.04.24 |