[C#] interface

interface


- 추상 클래스와 비슷하다.

- 상속하는 모든 클래스 형식에서는 해당 메소드를 모두 구현해야 한다.

- 직접 인스턴스화할 수 없다.

- 이벤트, 인덱서, 메소드, 프로퍼티만을 가질 수 있다.

- 메소드 구현을 하지 않는다. (선언은 있고 정의는 없다.)

- 클래스와 구조체는 여러 인터페이스를 상속 받을 수 있다.

- 인터페이스 자체는 여러 인터페이스를 상속 받을 수 있다.

- 접근자는 쓸 수 없고 모두 public이다.



사용하는 이유?

- 의도하지 않은 속성,메소드 공개를 막을수 있다.

- OOP의 상속에 억매이지 않고, 구현할 수 있도록 개방성을 제공한다.



※ 주의사항

- 속성, 메소드의 변화 가능성이 많다면, 아예 사용하지 않는것이 좋다.

=> 인터페이스에 변경이 일어난다면, 아주 위험한 상황이 올 수 있다.

인터페이스라는 것이 상속의 원형이 되는 것이므로, 원형이 변경되면

자식들도 변경이 일어난다는 뜻이다. 인터페이스에 경우, 전혀 다른 제품으로의

확장도 지원할 수 있으므로, 인터페이스 설계 시 아주 조심해야 한다.




형태


1
2
3
4
interface 인터페이스이름
{
    메소드
}
cs




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
using System;
 
namespace IUnit
{
    interface IUnit
    {
        void Move(int x, int y);
        void Attack(int x, int y);
        void Die();
    }
 
    class Marine : IUnit
    {
        public void Move(int x, int y)
        {
            Console.WriteLine("아장아장");
        }
 
        public void Attack(int x, int y)
        {
            Console.WriteLine("두두");
        }
 
        public void Die()
        {
            Console.WriteLine("으악");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Marine M = new Marine();
            M.Attack(5,5);
            M.Move(55);
            M.Die();
        }
    }
}
cs



IUnit 인터페이스는 구현은 정읳지 않으며, 메소드의 목록만을 제공한다.