본문 바로가기
back-end/JAVA

34) 매개변수의 다형성(1)-다형적 매개변수

by 모두의 향연 2021. 6. 10.
728x90
반응형

34) 매개변수의 다형성(1)-다형적 매개변수

장점:

①다형적 매개변수

②하나의 배열로 여러 종류 객체 다루기

 

지금까지 배운 다형성:

①Tv t = new SmartTv();

②참조 변수의 형 변환-리모콘 바꾸기

③instanceof연산자를 이요한 형변환 가능 여부 판단

 

 

1. 매개변수 다형성

-참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Product{
    int price;
    int bonusPoint;
}
 
class Tv extends Product{ }
class Audio extends Product{}
class Computer extends Product{}
 
class Buyer{
    int money = 10000;
    int bonusPoint = 0;
    
    void buy(Tv t) {
        money -= t.price;
        bonusPoint += t.bonusPoint;
    }
    void buy(Audio a) {//오버로딩
        money -= a.price;
        bonusPoint += a.bonusPoint;
    }
    void buy(Computer c) {//오버로딩
        money -= c.price;
        bonusPoint += c.bonusPoint;
   }
}
cs

 

물건을 살 때마다 매번 Buyer클래스 buy함수에 TV, Audio, Computer를 각각 추가해주면 시간도 많이 걸릴뿐더러 불편하다. 그래서 

buy메서드 변경

왼쪽 코드를 오른쪽처럼 변경시켜 코드를 간편화 해줍니다. 

Product p에는 'new Tv(), new Audio(), new Computer()'가 들어갈 수 있겠죠.

 

 

2. 예시

결과화면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
class Product{
    int price;//제품가격
    int bonusPoint;//제품보너스
    
    Product(int price){//tv,audio,computer샀을시에
        this.price = price;//각 제품 가격이 가격에 대입
        bonusPoint = (int)price/10;//가격의 10%를 보너스로 적립
    }
}
 
class Tv extends Product{ 
    Tv(){
        super(200);//조상생성자상속. product 매개변수에 tv가격 200대입
    }
    public String toString() {//반환을 String으로 하는 toString메서드 생성
        return "티비";//Tv의 주솟값을 String으로 반환
    }
}
class Audio extends Product{
    Audio(){
        super(50);//조상생성자상속. product 매개변수에 audio가격 50대입
    }
    public String toString() {//반환을 String으로 하는 toString메서드 생성
        return "오디오";//Audio의 주솟값을 String으로 반환
    }
}
class Computer extends Product{
    Computer(){
        super(100);//조상생성자상속. product 매개변수에 Computer가격 100대입
    }
    public String toString() {//반환을 String으로 하는 toString메서드 생성
        return "컴퓨터";//Computer의 주솟값을 String으로 반환
    }
}
 
class Buyer{
    int money = 10000;//사는 사람이 가지고 있는 돈
    int bonusPoint = 0;//보너스는 0임
    
    void buy(Product p) {//사는행위메서드. 매개변수로 Tv,Audio,Computer를 넣을 수 있음.
        if(money<p.price) {//만약 사는 사람이 갖고 있는 돈이 산 제품의 총 가격보다 적으면
            System.out.println("잔액부족");//이 문구 출력
        }else {//아니라면
            money -= p.price;//제품을 살 때 이 사람의 돈에서 빠져나감. 가격만큼
            bonusPoint += p.bonusPoint;//보니스는 원래 보너스에서 추가됨
            System.out.println(p+"를 구입하였습니다.");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Buyer b = new Buyer();//사는사람 객체생성
        
        Tv t = new Tv();//Tv객체생성
        Audio a = new Audio();//Audio객체생성
        Computer c = new Computer();//Computer객체생성
        
        b.buy(t);//Tv를 구매
        b.buy(c);//Computer를 구매
        
        System.out.println("현재 남은 돈은 "+b.money+"입니다.");
        System.out.println("현재 보너스점수는 "+b.bonusPoint+"점입니다.");
    }
}
 
cs

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형