본문 바로가기

Java

[Java] 상속 예제(과일 구매 프로그램)

728x90

이번에는 과일 구입 프로그램을 만들면서 상속배열을 활용하는 예제를 살펴보겠습니다. 과일 클래스를 만들고, Apple, Banana, Orange 클래스는 Fruit 클래스를 상속받아서 구현할 것입니다. 사용자는 사과, 바나나, 오렌지를 구입하고, 장바구니에 추가하며, 구입한 과일 목록을 확인하거나 특정 과일을 검색할 수 있는 프로그램을 작성합니다.


 

1. Fruit 클래스

Fruit 클래스는 모든 과일들이 공통적으로 가질 속성(이름, 가격, 색상, 원산지)을 정의하고 있습니다.

public class Fruit {
    private String name;
    private int price;
    private String color;
    private String from;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    @Override
    public String toString() {
        return name + " : " + price +
                "원, " + color + ", " + from;
    }
}

2. 과일별 클래스 (Apple, Banana, Orange)

Apple 클래스:

 

public class Apple extends Fruit {
    private int kg;

    public Apple(String name, int price, String color, String from, int kg) {
        super(name, price, color, from);
        this.kg = kg;
    }

    public int getKg() {
        return kg;
    }

    public void setKg(int kg) {
        this.kg = kg;
    }

    @Override
    public String toString() {
        return super.toString() + ", " + kg + "kg";
    }
}

Banana 클래스:

public class Banana extends Fruit {
    private int count;

    public Banana(String name, int price, String color, String from, int count) {
        super(name, price, color, from);
        this.count = count;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    @Override
    public String toString() {
        return super.toString() + ", " + count + "송이";
    }
}

Orange 클래스:

public class Orange extends Fruit {
    private int dangdo;

    public Orange(String name, int price, String color, String from, int dangdo) {
        super(name, price, color, from);
        this.dangdo = dangdo;
    }

    public int getDangdo() {
        return dangdo;
    }

    public void setDangdo(int dangdo) {
        this.dangdo = dangdo;
    }

    @Override
    public String toString() {
        return super.toString() + ", " + dangdo + "(당도)";
    }
}

3. 메인 프로그램 (Oop6)

이제 사용자가 과일을 구입하고, 구입 목록을 확인하고, 과일을 검색할 수 있는 메인 프로그램을 구현합니다.

import java.util.Scanner;

public class Oop6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 장바구니 배열 생성
        Fruit[] fruits = new Fruit[3]; // 과일 정보를 저장할 배열

        // 과일 객체 생성
        fruits[0] = new Apple("사과", 1000, "빨강", "청송", 7);
        fruits[1] = new Banana("바나나", 2000, "노랑", "필리핀", 10);
        fruits[2] = new Orange("오렌지", 1200, "주황", "호주", 7);

        // 장바구니 배열, 최대 10개까지 과일 구입 가능
        Fruit[] array = new Fruit[10];
        int count = 0; // 구입한 과일 개수 카운트

        while (true) {
            System.out.println("메뉴를 선택하세요(1. 사과구입 2.바나나구입 3.오렌지구입 4. 구입목록 5. 과일검색 6. 종료)");
            int choice = sc.nextInt();
            
            if (choice == 6) { // 6번 선택시 프로그램 종료
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            switch (choice) {
                case 1: // 사과 구입
                case 2: // 바나나 구입
                case 3: // 오렌지 구입
                    if (count < 10) {
                        System.out.println(fruits[choice - 1].getName() + "를 구입했습니다.");
                        array[count] = fruits[choice - 1]; // 장바구니에 과일 담기
                        count++;
                    } else {
                        System.out.println("장바구니가 꽉 찼습니다.");
                    }
                    break;
                
                case 4: // 구입목록 출력
                    System.out.println("***** 구입한 과일 *****");
                    for (int i = 0; i < count; i++) {
                        System.out.println((i + 1) + ": " + array[i]); // 구입한 과일 정보 출력
                    }
                    break;

                case 5: // 과일 검색
                    System.out.println("검색할 과일을 선택하세요(1. 사과 2. 바나나 3. 오렌지)");
                    int search = sc.nextInt();
                    boolean found = false;

                    for (int i = 0; i < fruits.length; i++) {
                        // 선택한 과일을 검색
                        if (search == 1 && fruits[i] instanceof Apple) {
                            System.out.println(fruits[i]);
                            found = true;
                        } else if (search == 2 && fruits[i] instanceof Banana) {
                            System.out.println(fruits[i]);
                            found = true;
                        } else if (search == 3 && fruits[i] instanceof Orange) {
                            System.out.println(fruits[i]);
                            found = true;
                        }
                    }

                    if (!found) {
                        System.out.println("해당 과일은 없습니다.");
                    }
                    break;

                default:
                    System.out.println("올바른 입력을 선택하세요.");
            }
        }
        sc.close();
    }
}

프로그램 설명

  • 메뉴 옵션
    • 1: 사과 구입
    • 2: 바나나 구입
    • 3: 오렌지 구입
    • 4: 구입한 과일 목록 보기
    • 5: 과일 검색
    • 6: 종료
  • 구입한 과일 저장: 장바구니에 과일을 최대 10개까지 저장할 수 있습니다.
  • 과일 검색: 사용자가 선택한 과일을 instanceof 연산자를 사용하여 검색할 수 있습니다.
  • 구입목록 보기: 구입한 과일들의 정보를 출력합니다.

이 프로그램을 통해 상속을 활용한 객체지향 프로그래밍의 구조를 잘 구현할 수 있습니다. 각 과일은 Fruit 클래스를 상속받아 공통 속성을 가지고 있으며, 사용자가 과일을 선택하고 구입하는 과정에서 객체의 다형성과 배열을 활용하여 구현합니다.

 

 

 

 

728x90