추상클래스와 유사한 점
- 본체가 정의되지 않은 추상 메소드를 가진다는 것
- 객체를 생성할 수 없다는 점

추상클래스 - 추상 메소드를 선택적으로 가짐
인터페이스 - 메소드들이 전부 추상, 완전 추상클래스 라고도 함
                - 포함할 수 있는 멤버의 종류가 제한
                - 멤버를 선언하는 형식에도 차이가 있고, 다중 상속에도 사용할수 있다
                - 멤버는 주로 메소드, 프로퍼티, 인덱서, 이벤트
                - 필드, 상수, 내부 타입, 생성자, 연산자는 포함 불가능

프로퍼티 - 객체의 정보에 접근하는 메소드

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
using System;
 
namespace IUnitEnergy
{
    interface IUnit
    {
        int Energy
        {
            get;
        }
    }
 
    class Marine : IUnit
    {
        private int Life = 100;
 
        public int Energy
        {
            get
            {
                return Life;
            }
        }
    }
 
    class Zealot : IUnit
    {
        private int Shield = 100;
        private int Life = 100;
 
        public int Energy
        {
            get
            {
                return Shield + Life;
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Marine M = new Marine();
            Zealot Z = new Zealot();
        }
    }
}


- 프로퍼티 구현이 다 제각각이기 때문에 인터페이스는 구현을 제공할수 없다


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
91
using System;
 
namespace ICar
{
    interface ICar
    {
        void Run();
        void Back();
    }
    
    class Sedan : ICar // 공개된 가상으로 선언하여 파생클래스들이 재정의하게 허가
    {
        public virtual void Run()
        {
            Console.WriteLine("부웅부웅");
        }
        public virtual void Back()
        {
            Console.WriteLine("띠리리리리");
        }
    }
 
    abstract class Suv : ICar // Run메소드를 확정적으로 구현
    {
        public virtual void Run()
        {
            Console.WriteLine("덜덜");
        }
 
        public abstract void Back();
        public abstract void Run4Wd();
    }
 
    class Grandeur : Sedan
    {
        public override void  Run()
        {
            Console.WriteLine("달려도 소리가 안들림");
        }
        public void booking()
        {
            Console.WriteLine("야타");
        }
    }
 
    class Matiz : Sedan
    {
        public override void Run()
        {
            Console.WriteLine("작은차");
        }
        public void Parking()
        {
            Console.WriteLine("주차가능");
        }
    }
     
    class Korando : Suv
    {
        public override void Back()
        {
            Console.WriteLine("비켜");
        }
        public sealed override void Run4Wd()
        {
            Console.WriteLine("4륜");
        }
 
    }
     
    class Program
    {
        public static void CarTest(ICar Car)
        {
            Car.Run();
            Car.Back();
        }
 
        static void Main(string[] args)
        {
            ICar G = new Grandeur();
            CarTest(G);
 
            ICar M = new Matiz();
            CarTest(M);
 
            ICar K = new Korando();
            CarTest(K);
        }
    }
}

Posted by 코딩하는 야구쟁이
,