개념
- 일종의 '클래스가 따라야 하는 약속'이라고 할 수 있다.
- 메서드, 프로퍼티, 인덱서, 속성만을 가질 수 있으며 단지 정의만 한다.
(구현부를 갖지 못한다.)
- abstract와 개념적으로는 유사하다.
- Interface와 상속관계에 있는 클래스는 반드시 Interface에 정의한 부분에 대해서 구현해야한다.
- Interface 자체적으로 인스턴스를 만들 수 없다.
- Interface 내부에는 접근 제한자를 가질 수 없다. (강제 public이다)
사용 목적
- 다중 상속이 가능하여 여러 클래스에서 사용되는 공통적인 기능에 대한 명세를 정의하는데 사용한다.
(실제 구현은 Interface를 상속받는 Class에서 구현한다.)
- 콘센트 규격처럼 일종의 규격을 정해놓고 구현하도록 유도하기 위해 사용된다.
- 다형성 때문에 사용한다.
다형성에 대해서 간단히 예시를 들어보자면
1. 동물이 있다고 가정하자
2. 원숭이가 있고 고양이가 있다고 가정하자
3. 원숭이와 고양이는 '동물'에 속한다.
4. 먹고, 걷고, 자는것은 두 동물 모두 같다.
5. 그러나 두 동물은 먹는 방법, 걷는 방법, 자는 방법이 다 다르다.
6. 다형성이란 '동물'이라는 개념안에 공통된 기능의 정의가 있고 실 기능은 각 동물들이 구현한다고 생각하면 된다.
글로 설명하려니까 어려우니 그냥 코드를 보자.
사용 예시
위와 같이 Interface는 기능에 대한 정의만 하고 실제 기능은 각 동물 클래스 안에서 구현한다.
abstract를 배운 사람들은 abstract로 해도 되지 않냐! 하겠지만 abstract와의 차이는 명확하다.
다중 상속이 가능하냐 아니냐다.
Interface는 class가 아니기 때문에 다중 상속이 가능하고 abstract는 class라서 다중 상속이 불가능하다.
abstract 링크
'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글
Sealed (상속 한정 키워드) (0) | 2020.04.11 |
---|---|
Interface와 abstract의 차이 (0) | 2020.04.11 |
Abstract (추상) (0) | 2020.04.10 |
Virtual (가상 메소드) (0) | 2020.04.10 |
Queue (큐) (2) | 2020.04.10 |