[C# 문법] C# 다형성이란

안녕하세요.

 

오늘은 C# 다형성에 대해서 공부를 하려고 합니다.

 

앞서, C# 상속 문법에 대해서 공부를 했었는데요. 오늘은 상속만큼 매우 중요한 다형성 개념에 대해서 공부하고 예제코드까지 작성해 보도록 하려고 합니다.

 

먼저 다형성이 무엇인지 간단히 개념 설명을 보자면,

 

다형성이란 쉽게 말해, 형태는 같지만 자세히 들여다 보면 그 형태의 고유 특징이 저마다 모두 다르다는 것을 의미합니다.

 

예를 들어, 동물이라는 큰 범주가 있고 동물에는 개, 고양이, 호랑이, 오리, 사자 등과 같이 매우 다양한 종의 동물 들이 있습니다.

 

여기서 동물의 특징 중 하나는 모두 저마다의 울음 소리가 있다는건데요.

 

동물은 크게 울음 소리 라는 형태가 있지만, 강아지, 고양이, 사자, 호랑이 모두 울음 소리를 자세히 들어보면 모두 다른 형태로 울고 있다는 것을 알 수 있습니다.

 

즉 위의 개념이 쉽게 다형성 개념이라고 이해하시면 되겠습니다~

 

그럼 위의 개념을 토대로, C#에서는 어떻게 다형성을 표현하는지 예제 코드를 통해서 알아보도록 하겠습니다.

 

예제 코드
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
using System;
using System.Collections.Generic;
 
namespace polyTest
{
    class Program
    {
        /// <summary>
        /// 동물 베이스 클래스 선언
        /// </summary>
        class Animal
        {
            public string name { get; set; }
            public int age { get; set; }
 
            //울음 메서드를 virtual (가상 메서드)로 선언
            public virtual void Sound()
            {
                Console.WriteLine("이것은 Animal 클래스의 Sound 입니다.");
            }
        }
 
        class Dog : Animal
        {
            public override void Sound()
            {
                Console.WriteLine("멍멍");
                base.Sound();
            }
        }
 
        class Cat : Animal
        {
            public override void Sound()
            {
                Console.WriteLine("야옹");
                base.Sound();
            }
        }
 
        class Duck : Animal
        {
            public override void Sound()
            {
                Console.WriteLine("꽥꽥꽥");
                base.Sound();
            }
        }
 
        static void Main(string[] args)
        {
            var animals = new List<Animal>
            {
                new Dog(),
                new Cat(),
                new Duck()
            };
 
            //각각의 동물들 Sound 출력
            foreach (var animal in animals)
            {
                animal.Sound();
            }
        }
    }
}
 
cs

 

실행 결과

위와 같이 부모 클래스인 Animal의 Sound 메서드를 각각의 파생 클래스인 Dog, Cat, Duck 클래스에서 Sound 메서드를 파생 받아서 override 키워드를 이용하여 다시 Sound 메서드를 재정의 해주고, 그 안에 저마다의 울음소리를 입력해서 출력하니까 위와 같이 본인의 울음소리가 출력 되면서 해당 Sound() 메서드는 부모 클래스인 Animal에서 파생되어 받아 온 것을 모두 확인하실 수 있습니다.

 

위와 같은 특징이 다형성 입니다!

 

감사합니다.^^

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY