본문 바로가기
Java/기본 개념 및 클래스

[Java] 45. 배열, 업/다운 캐스팅, 다형성 활용 : 인형 뽑기 프로그램 만들기

글: Song hyun 2024. 4. 24.
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
반응형