C#에서 상속시 자주 등장하는 키워드 virtual(가상), Abstract(추상), Interface(인터페이스)에 대해 정리하려고 한다.
Virtual (가상) 키워드
- 자식 클래스에서 override 할 수 있으나 원하면 재정의 해야한다.
- virtual class는 완벽한 기능을 제공할 수 있다.
- 가상 클래스는 인스턴스화 할 수 있다.
Abstract (추상) 키워드
- 불완전한 키워드로 자식 클래스에서 반드시 재정의 해야한다.
- 사용 목적은 여러 자식 클래스에서 공유할 기본적인 클래스의 공통적인 정의를 제공하는 것이다.
- 추상 클래스는 인스턴스화 할 수 없다.
Interface (인터페이스) 키워드
- abstract와 비슷하나 멤버 필드를 사용할 수 없다. 그러나 함수와 프로퍼티는 사용 가능하다.
- 여러클래스에 공통적인 기능을 추가하기 위해 사용한다.
Abstract vs Interface
보통 abstract는 개념적으로 계층적인 구조에서 사용이 되며 Interface는 서로다른 계층이나 타입이라도 같은기능을 추가하고 싶을때 사용한다.
결론
-Vritual은 하나의 기능을 하는 완전한 클래스이며, 파생클래스에서 상속해서 추가적인 기능추가 및 virtual 한정자가 달린 것을 재정의해서 사용 가능하다.
-Abstract는 여러개의 파생 클래스에서 공유할 기본 클래스의 공통적인 정의만 하고 ,파생클래스에서 abstract 한정자가 달린 것을 모두 필수적으로 재정의 해야한다.
-Interface는 abstract와 비슷하지만 멤버변수를 사용할 수 없다.
ex) Animal 클래스 하위 Dog, Bird 클래스들이 있고 Walk와 Fly 기능을 선택에 따라 재정의해서 구현시 -> Virtual 사용
ex) Ainmal 클래스 하위 Dog, Cat 클래스들이 있고 Cry 기능이 무조건 있어야 할 때 -> Abstract 사용
ex) Animal 클래스, Machine 클래스 가 있을 때 두개의 서로다른 클래스에 Cry() 라는 기능 구현시 -> Interface 사용
'C# 공부' 카테고리의 다른 글
[자료구조] 큐(Queue) (0) | 2023.06.26 |
---|---|
[자료구조] 스택(Stack) (0) | 2023.06.23 |
[Tip] @(심벌) 사용 (0) | 2023.06.22 |
[자료구조] 해시테이블(Hash Table), Dictionary (0) | 2023.06.22 |
[자료구조] 연결 리스트(Linked List) (0) | 2023.06.22 |