클래스 상속을 위해 부모 클래스를 생성할 때 고려할 수 있는 대상은 3가지가 될 수 있다.
1. standard class
2. abstract class
3. interface class
1번의 경우는 일반 클래스로 자식 클래스에서 override를 수행할 때에 부모 클래스의 함수가 수행 되므로, 특정 자식 클래스에 대한 함수를 따로 구현 할 떄에 이를 compile 단계에서 알수가 없다.
그와 반대로 2,3번의 경우는 위의 상황에 대해 compile 단계에서 에러를 발생한다.
그럼, 어떤 상황을 생각 했을 때에 abstract 와 interface 를 선택할 것인가??
차이점을 살펴 보자.
- abstract 클래스는 구현이 가능한 클래스이나, interface의 경우는 정의만 되어진 클래스이다.
- abstract 는 자식 클래스에서 하나의 클래스만 상속이 가능하다. abstract 클래스 이외의 다른 클래스는 상속이 불가능 하다.
- interface는 일반 클래스를 포함 여러 interface클래스를 함께 상속이 가능하다.
- abstract는 속성과 함수에 접근자를 넣을 수 있으나, interface는 모두 자동으로 public이다.
(이때 직접 public을 넣으면 compile 에러가 발생한다)
- 멤버 변수를 사용할 수 있는 범위가 서로 다르다, abstract는 모든 멤버를 사용할 수 있지만, interface는 properties,
method,event, indexer만 가능하다
Choose between Abstract Class and Interface Class
1. 공통의 코드를 공유하는 자식의 클래스를 생성하는 경우에는 Abstract Class..
-> Abstract class 에서 공통으로 쓰일 수 있는 함수에 대해서는 구현을 하고, 서로 공용되지 않는 함수에 대해서는 선언만 한다.
2. 반대로 상속 할 때 서로의 구현되는 코드가 다를 경우에는 interface 를 사용한다.