반응형
오늘은 클래스와 다형성에 대한 코딩 연습을 해봤습니다. 다형성은 코딩량을 획기적으로 줄여주고 더 효율적인 관리를 가능케 합니다.
class Army
{
protected int _HP;
protected int _MP;
protected int _Speed;
protected int _Attack;
public virtual void Run()
{
Console.Write("Speed : {0}, ", _Speed);
}
public virtual void Attack()
{
// 줄내림
Console.WriteLine();
//
Console.Write("Att : {0}, ");
}
}
class Babarian : Army
{
// 생성자, 기본값 설정
public Babarian()
{
_HP = 100;
_MP = 10;
_Speed = 3;
_Attack = 100;
}
public override void Run()
{
base.Run();
Console.WriteLine(" Babarian is running.");
}
public override void Attack()
{
base.Attack();
Console.WriteLine(" Babarian attacks using Sword");
}
}
class Giant : Army
{
public Giant()
{
_HP = 500;
_MP = 5;
_Speed = 1;
_Attack = 200;
}
public override void Run()
{
base.Run();
Console.WriteLine(" Giant is running.");
}
public override void Attack()
{
base.Attack();
Console.WriteLine(" Giant punching!");
}
}
class Healer:Army
{
public Healer()
{
_HP = 50;
_MP = 100;
_Speed = 5;
_Attack = 20;
}
public override void Run()
{
base.Run();
Console.WriteLine(" Healer is Flying.");
}
public override void Attack()
{
base.Attack();
Console.WriteLine(" Healer shoots fireball.");
}
}
class Program
{
static void Main(string[] args)
{
Army[] arrArmys = new Army[10];
arrArmys[0] = new Babarian();
arrArmys[1] = new Giant();
arrArmys[2] = new Healer();
for(int i = 0; i < arrArmys.Length; i++)
{
if(null != arrArmys[i])
{
arrArmys[i].Run();
}
}
for(int i = 0; i <arrArmys.Length; i++)
{
if(null != arrArmys[i])
{
arrArmys[i].Attack();
}
}
}
}
Army를 부모클래스로서 상속 받은 Babarian, Giant, Healer는 Army로 인스턴스화된 arrayArmys 상에서 Run(), Attack()함수가 매우 심플하게 호출됩니다.
반응형