다형성
- 똑같은 호출문이라도 변수가 실행 중에 가리키는 타입에 따라 실제 동작이 달라질수 있다

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
 
namespace StarUnit
{
    class Unit
    {
        public virtual void Move()
        {
            Console.WriteLine("이동");
        }
 
        public virtual void Attack()
        {
            Console.WriteLine("공격");
        }
 
        public virtual void Die()
        {
            Console.WriteLine("죽음");
        }
    }
 
    class Marine : Unit
    {
        public override void Move()
        {
            Console.WriteLine("아장아장");
        }
 
        public override void Attack()
        {
            Console.WriteLine("두두두");
        }
 
        public override void Die()
        {
            Console.WriteLine("으아악");
        }
    }
 
    class Tank : Unit
    {
        public override void Move()
        {
            Console.WriteLine("끼릭끼릭");
        }
 
        public override void Attack()
        {
            Console.WriteLine("빠방");
        }
 
        public override void Die()
        {
            Console.WriteLine("펑");
        }
    }
 
    class Zealot : Unit
    {
        public override void Move()
        {
            Console.WriteLine("뒤뚱뒤뚱");
        }
 
        public override void Attack()
        {
            Console.WriteLine("퍽퍽퍽");
        }
 
        public override void Die()
        {
            Console.WriteLine("슈우우");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Unit[] arUnit = { new Marine(), new Tank(), new Zealot() };
            for (int i = 0; i < arUnit.Length; i++)
            {
                arUnit[i].Move();
                arUnit[i].Attack();
                arUnit[i].Die();
            }
        }
    }
}




- 유닛에 따라 이동, 공격, 죽는 방법이 모두 다르므로 메소드를 가상으로 선언, 파생클래스들은 자신에게 맞게 재정의
- 모든 유닛들은 Unit에서 파생, 배열로 선언하면 집합을 관리할수 있다
- 똑같은 호출문으로도 서로 다른 겨롸가 나올수 있는것, 이것이 바로 다형성의 정의이다

- 미래에 추가되는 클래스에 대해서도 잘 동작한다
- 새 히드라 클래스를 추가하도 잘 동작한다

Posted by 코딩하는 야구쟁이
,