본문 바로가기

자바 JAVA

간단한 매개변수의 다형성 활용예제

이전까지 자바에서 객체를 생성할 때는

Thing a = new Thing(); 과 같은 구문을 이용했다.

 

다형성은 객체지향언어의 특성 중 하나로,

그 중 매개변수의 다형성은

 

예를들면 부모클래스로부터 상속받은 자식 클래스가 있을 때

Parent a = new Child(); 의 형태로 표현이 가능한 것을 의미한다.

Child a = new Parent(); 형태는 불가

 

이를 통해 Child, Child2, Parent 등 각기 다른 객체들을

마치 Parent 객체 하나인 양 다룰 수 있다.

 

package sample;

public class Sample
{
	public static void main(String[] args)
	{
		Buyer a = new Buyer();
		a.Buy(new Tv());
		a.Buy(new Audio());
		a.Buy(new Computer());
		
		a.summary();
	}
}

class Product
{
	int price;
	int bonusPoint;
	
	Product(int price)
	{
		this.price = price;
		bonusPoint = (int)(price/10.0);
	}
}

class Tv extends Product
{
	Tv()
	{
		super(100);
	}
	
	public String toString()
	{
		return "Tv";
	}
}

class Computer extends Product
{
	Computer()
	{
		super(200);
	}
	
	public String toString()
	{
		return "Computer";
	}
}

class Audio extends Product
{
	Audio()
	{
		super(80);
	}
	
	public String toString()
	{
		return "Audio";
	}
}

class Buyer
{
	int money = 400;
	int bonusPoint;
	Product[] a = new Product[10];
	int i;
	
	void Buy(Product p)
	{
		if(money < p.price)
		{
			System.out.println("잔액이 부족하여 구매할 수 없습니다");
		}
		
		money -= p.price;
		bonusPoint += p.bonusPoint;
		a[i++] = p;
		System.out.println(p + " 를 구매했습니다");
		System.out.println("남은 금액은 " + money + " 입니다");
	}
	
	void summary()
	{
		int i;
		String total = "";
		
		for( i=0; i<a.length; i++)
		{
			if(a[i]==null) break;
			
			total += (i==0) ? "" + a[i]: "," + a[i];
		}
		System.out.println("최종 적립포인트는 " + bonusPoint + " 입니다");
		System.out.println("최종 구매내역은 " + total + " 입니다");
	}
}

 

예제에서는 Product를 상속받은 Tv, Audio, Computer 클래스를

Product라는 하나의 클래스로 묶어

Buyer의 Buy메소드의 매개변수로 사용했다.