[C#] interface
C# 2017. 4. 3. 20:45
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(5, 5); M.Die(); } } } | cs |
IUnit 인터페이스는 구현은 정읳지 않으며, 메소드의 목록만을 제공한다.
'C#' 카테고리의 다른 글
[C#] 메소드 오버로딩, 가변길이 매개 변수, 선택적 매개 변수 (0) | 2017.03.25 |
---|---|
[C#] 참조에 의한 매개 변수 전달. ref / 출력 전용 매개 변수. out (0) | 2017.03.24 |
[C#] 공용 형식 시스템. (0) | 2017.03.24 |
[C#] var형식 (0) | 2017.03.24 |
[C#] Object형식, 박싱과 언박싱. (1) | 2017.03.23 |