πŸ—„οΈ Backend/Java

μžλ°”(Java) - 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (7) λ‹€ν˜•μ„±

kongmi 2023. 1. 16. 19:12

λ‹€ν˜•μ„±

μ—¬λŸ¬κ°€μ§€ νƒ€μž…μ„ ν•œκ°€μ§€ νƒ€μž…μœΌλ‘œ 처리 ν•  수 μžˆλŠ” 기술(상속 κ΄€κ³„μ‹œ 이용)
λΆ€λͺ¨ 클래슀의 μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ‹ 클래슀의 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό μ°Έμ‘°ν•˜λŠ” 방법
단, λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μ•Œκ³ μžˆλŠ” λ©”μ†Œλ“œκ°€ μ˜€λ²„λΌμ΄λ”© λ˜μ–΄ μžˆλŠ” κ²½μš°μ— ν•΄λ‹Ή!!!

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;
        }
    }
}