[Study] Virtual, Abstract, Interface
virtual(가상)
abstract(추상)
- 클래스 내부에서 abstract를 사용하려면 클래스 정의부에 abstract 키워드 선언
- 여러개의 파생 클래스에서 공유할 기본 클래스의 공통적인 정의만 하고, 파생 클래스에서는 무조건 재정의
- abstract 키워드는 인스턴스화 불가능
interface(인터페이스) :
- abstract(추상)와 비슷하지만, 멤버변수를 사용할 수 없다.
- abstract와 interface의 가장 큰 차이는 interface는 다중 상속이 가능하다.
- 서로 다른 계층이나 타입이더라도 같은 기능을 추가하고 싶을 때 사용한다.
- interface는 가장 높은 추상성을 제공한다.
- 필드로 메서드, 프로퍼티 인덱서만 가질 수 있으며 abstract가 아닌 필드는 정의할 수 없다.
- 접근 제한자를 사용할 수 없으며 모든 필드는 public이 적용된다.
- interface는 상속의 개념보단 기능을 확장하는 개념
- 서로 관계가 없는 클래스도 동일한 interface를 구현 가능
- 서로 관계가 없는 클래스도 interface를 구현함으로써 관계가 형성되는데 이는 다형성으로 연결