static void attackCount(StarUnit starUnit, int cnt)
 {
     for (int i = 0; i < cnt; i++)
     {
         starUnit.attack();
     }
 }
        static void Main(string[] args)
        {
            // 부모 클래스 변수 = 자식 객체
            // 1) 묶어서 관리하기가 용이하니까
            // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능

            StarUnit[] starArr = new StarUnit[3];
            starArr[0] = new StarUnit();
            starArr[1] = new Marine();
            starArr[2] = new Hydra();
            attackCount(starArr[0], 3);
            attackCount(starArr[1], 5);
            attackCount(starArr[2], 7);
        }
        static void attackCount(StarUnit starUnit, int cnt)
        {
            //attack() 메서드를 호출할 때
            //virtual 키워드가 없으면
            //컴파일러는 클래스 타입으로
            //attack() 메서드 호출을 결정한다.
            //(virtual이 없으면 객체와 무관하게
            //클래스 타입에 의해 attack메서드가 결정된다.)
            //컴파일 시 결정 되므로 이것을
            // '정적 바인딩'이라 부른다.

            for (int i = 0; i < cnt; i++)
            {
                starUnit.attack();
            }
        }
        static void Main(string[] args)
        {
            // 부모 클래스 변수 = 자식 객체
            // 1) 묶어서 관리하기가 용이하니까
            // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능

            //유닛들이 계속 증가할 때마다
            //    해당 attackCount메서드도 추가해야 한다
            //    => 코드를 손댈 것이 많다
            //    => 100개 유닛 증가 => 100개 메서드도 증가
            StarUnit starUnit = new StarUnit();
            Marine   marine   = new Marine();
            Hydra    hydra    = new Hydra();

            attackCount(starUnit, 3);
            attackCount(marine, 5);
            attackCount(hydra, 7);
        }
        static void Main(string[] args)
        {
            //[다향성]
            // 부모 클래스 변수 = 자식 객체
            // 1) 묶어서 관리하기가 용이하니까
            // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능
            // 3) virtual, override를 해주면
            // 클래스 변수에 따른 동작이 아니라
            // 객체에 따른 동작이 진행된다.

            //유닛들이 계속 증가할 때마다
            //    해당 attackCount메서드도 추가해야 한다
            //    => 코드를 손댈 것이 많다
            //    => 100개 유닛 증가 => 100개 메서드도 증가
            //    => 기존 메서드마다 모두 계속 만들어야 한다
            StarUnit[] starArr = new StarUnit[3];
            starArr[0] = new StarUnit();
            starArr[1] = new Marine();
            starArr[2] = new Hydra();
            attackCount(starArr[0], 3);
            attackCount(starArr[1], 5);
            attackCount(starArr[2], 7);
        }