Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

인터페이스 interface 본문

프로그래밍 언어/C#

인터페이스 interface

야식은진리다 2019. 12. 28. 16:18

인터페이스는 클래스가 따라야 하는 약속이다. 마치 플러그를 통해 전원을 공급받기 위해 따라야만 하는 전기 플러그 규격처럼 인터페이스를 상속받기위해 클래스들은 인터페이스에 선언된 모든 메서드를 구현해야 한다.

 

인터페이스는 메서드, 이벤트, 인덱서, 프로퍼티 등을 선언만 할 수 있고 구현부를 가질 수 없다. 또한 인스턴스를 가질 수도 없다. 하지만 자식 클래스의 인스턴스를 참조할 수 있다.

 

자식 클래스의 인스턴스를 참조하게 되면 인터페이스는 자신에게 선언되어있는 메서드를 호출할 수 있고 작동은 참조한 자식 클래스에 구현되어있는 대로 작동한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interface Animal
{
    void Breath();
}
 
class Dog : Animal
{
    public void Breath()
    {
        Console.WriteLine("들숨날숨");
    }
        public void Bark()
    {
        Console.WriteLine("멍멍");
    }
}

 

이처럼 구현되어있는 인터페이스와 클래스는 아래와 같이 사용할 수 있다.

 

 
1
2
3
Animal dog = new Dog();
dog.Breath(); // "들숨날숨" 출력
dog.Bark(); // 컴파일에러 

 

Breath()는 인터페이스에 선언되어있으므로 자식 클래스에서 구현된 대로 작동하고, Bark()는 인터페이스에 선언돼있지 않으므로 컴파일 에러가 발생한다.

 

 

만일 기존의 인터페이스에 새로운 메서드를 추가한 인터페이스를 만들고 싶다면 인터페이스를 상속하는 인터페이스를 만들면 된다. 그냥 인터페이스를 수정해도 되지만 해당 인터페이스를 상속받는 클래스들이 이미 존재한다면 상속받는 클래스들도 모두 수정이 이루어져야 하므로 새로운 인터페이스를 만들어주는 게 낫다.

 

또한 클래스는 죽음의 다이아몬드 문제 때문에 다중 상속이 불가능 하지만 인터페이스는 가능하다.

'프로그래밍 언어 > C#' 카테고리의 다른 글

추상 클래스  (0) 2019.12.28
죽음의 다이아몬드  (0) 2019.12.28
확장 메서드  (0) 2019.12.28
메서드 오버라이딩 / 메서드 숨기기  (0) 2019.12.28
is와 as  (0) 2019.12.28