본문 바로가기
카테고리 없음

C# 코딩 연습 - 클래스, 다형성

by Mulder5 2020. 11. 13.
반응형

오늘은 클래스와 다형성에 대한 코딩 연습을 해봤습니다. 다형성은 코딩량을 획기적으로 줄여주고 더 효율적인 관리를 가능케 합니다. 

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()함수가 매우 심플하게 호출됩니다.

반응형