- [Java] 45. 배열, 업/다운 캐스팅, 다형성 활용 : 인형 뽑기 프로그램 만들기2024년 04월 24일
- Song hyun
- 작성자
- 2024.04.24.:41
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 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)