GiantStepDEV
article thumbnail

๋‹คํ˜•์„ฑ

์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์„ ํ•œ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ (์ƒ์† ๊ด€๊ณ„์‹œ ์ด์šฉ)
๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ์ž์‹ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•
๋‹จ, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹น!!!

Parent

public class Parent {
    protected int num;
    public void display() {
        System.out.println("๋ถ€๋ชจ ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ");
    }
}

Child

public class Child extends Parent {
    private int x = 100;
    public Child() {}
    public void out() {
        System.out.println("๋ถ€๋ชจ์˜ protected num ํ•„๋“œ : " + num);
        System.out.println("์ž์‹ ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ");
    }
    @Override
    public void display() {
        System.out.println("์ƒ์† ๋ฐ›์•„ ์žฌ์ •์˜ํ•œ ๋ฉ”์†Œ๋“œ");
    }
}

Main

public class PolyEx1 {
    public static void main(String[] args) {
        Child child = new Child(); // Child ํด๋ž˜์Šค์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜(child)๋กœ Child ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
        child.display();
        child.out();

        Parent parent = new Child(); // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž ์กฐ๋ณ€์ˆ˜๋กœ ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
        parent.display();
    }
}

์‹คํ–‰ํ™”๋ฉด

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋‹คํ˜•์„ฑ

๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ๋™์ผํ•œ ๋งค๊ฐœ๊ฐ’์„ ์ง€์ •ํ•˜์ง€๋งŒ,
์ƒ์†๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ž์‹ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์‹œ์ ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์Œ.

์˜ˆ์ œ1

public class PolyBuyer {
    public static void main(String[] args) {
        Buyer buyer = new Buyer(); // ๊ตฌ๋งค๋ฅผ ํ•˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ
        TV tv = new TV();
        Audio audio = new Audio();
        Computer computer = new Computer();
        buyer.buy(tv);
        buyer.buy(audio);
        buyer.buy(computer);
        buyer.viewInfo();
    }
}
์ œํ’ˆ๋“ค(tv,computer ...)์€ Product ํด๋ž˜์Šค์˜ ์ž์‹ ํด๋ž˜์Šค ์ด๊ธฐ ๋•Œ๋ฌธ์— buy ๋ฉ”์†Œ๋“œ์— ์–ด๋–ค ์ œํ’ˆ์ด ๋“ค์–ด์˜ค๋“  ์ƒ๊ด€ ์—†์Œ.
๋‹ค๋ฅธ ์ œํ’ˆ๋“ค์ด ์ถ”๊ฐ€๋œ๋‹ค ํ•œ๋“ค buy ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„๋„ ๋จ.
์–ด์ฐจํ”ผ ๋ถ€๋ชจ ํด๋ž˜์Šค(Product) ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ
์ด๋Š” ๊ฐ์ฒด๊ฐ„ ๋А์Šจํ•œ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ํ•ต์‹ฌ์ด ๋จ.
public class Product {
    int price;
    int bonusPoint;
}
class TV extends Product {
    TV() {
        this.price = 100; // ์ƒ์†๋ฐ›์€ ํ•„๋“œ์˜ ๊ฐ’์„ ์ดˆ๊ธฐํ™”
        this.bonusPoint = 10;
    }
}
class Audio extends Product {
    Audio() {
        this.price = 120;
        this.bonusPoint = 12;
    }
}
class Computer extends Product {
    Computer() {
        this.price = 200;
        this.bonusPoint = 20;
    }
}
class Buyer {
    int money = 1000;
    int bonusPoint = 0;
    void buy(Product p) { // โ˜…โ˜…๊ฐ ์ œํ’ˆ์— ๋Œ€ํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์˜ ๋ณ€์ˆ˜
        money -= p.price; // ์ œํ’ˆ ๊ตฌ๋งค์‹œ ์ œํ’ˆ ๊ธˆ์•ก ๋งŒํผ์˜ ๋ˆ์„ ์ง€๋ถˆํ•˜๋Š” ์ฝ”๋“œ
        bonusPoint += p.bonusPoint; // ์ œํ’ˆ ๊ตฌ๋งค์‹œ ํ•ด๋‹น ํฌ์ธํŠธ๋ฅผ ๋ˆ„์ ํ•˜๋Š” ์ฝ”๋“œ
    }
    void viewInfo() {
        System.out.println("์ž”์•ก : " + money);
        System.out.println("ํฌ์ธํŠธ : " + bonusPoint);
    }
}
<์ถœ๋ ฅํ™”๋ฉด>
์ž”์•ก : 580
ํฌ์ธํŠธ : 42

์˜ˆ์ œ2

Driver

public class Driver {
    String name; // ์šด์ „์ž ์ด๋ฆ„
    public Driver(String name) {
        this.name = name;
    }
    public void drive(Vehicle vehicle) {
        System.out.print(name + "์˜ ");
        vehicle.run();
    }
}

Vehicle

public class Vehicle {
    public void run() {
        System.out.println("์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
    }
}
class SportsCar extends Vehicle {
    @Override
    public void run() {
        System.out.println("์Šคํฌ์ธ ์นด๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
    }
}
class Bus extends Vehicle {
    @Override
    public void run() {
        System.out.println("๋ฒ„์Šค๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
    }
}
class Taxi extends Vehicle {
    @Override
    public void run() {
        System.out.println("ํƒ์‹œ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
    }
}

Main

import java.util.Scanner;

public class PolyCar {
    public static void main(String[] args) {
        Driver driver = new Driver("ํ™๊ธธ๋™");
        SportsCar sportsCar = new SportsCar();
        Bus bus = new Bus();
        Taxi taxi = new Taxi();
        Scanner sc = new Scanner(System.in);
        System.out.print("์šด์ „ํ•˜๊ณ  ์‹ถ์€ ์ฐจ๋ฅผ ์„ ํƒ ํ•˜์„ธ์š”. [1]์Šคํฌ์ธ ์นด [2]๋ฒ„์Šค [3]ํƒ์‹œ : ");
        int selCar = sc.nextInt();
        switch (selCar) {
            case 1 : driver.drive(sportsCar); break;
            case 2 : driver.drive(bus); break;
            case 3 : driver.drive(taxi); break;
        }
    }
}

 

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!