프로그래밍 이론/기본 이론

[복습] 상속(Virtual, Abstract)과 인터페이스 : 잊지말자

minquu 2021. 9. 2. 23:40
반응형

OOP 개념에서 상속을 얘기할 때 Virtual(가상) 과 Abstract(추상화)가 많이 사용된다.

그리고 Interface 또한 비슷한 기능을 제공하는데 비교를 알아 보겠다. 

 

 

 

Virtual (가상)

1. Abstract (추상화)와 다르게 본문을 정의할 수 있음

2. 파생 클래스에서 재 정의 할 수 있음

3. 자식 클래스에서 new 또는 override 키워드 사용이 가능

       override 는 재정의 또는 확장의 의미

       new 는 기본 클래스를 숨긴다는 의미

4. base 키워드를 통해서 부모 클래스의 함수 호출 가능

5. private, static 등 접근 한정자는 사용 할 수 없음

 

virtual 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언을 수정하고

파생 클래스에서 재정의하도록 허용하는 데 사용됩니다. 예를 들어 이 메서드는 이를

상속하는 모든 클래스에서 재정의할 수 있습니다.

 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/virtual

 

virtual - C# 참조

virtual(C# 참조) 이 문서의 내용 --> virtual 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언을 수정하고 파생 클래스에서 재정의하도록 허용하는 데 사용됩니다. 예를 들어 이 메서드는 이를 상속

docs.microsoft.com

 

 

 

 

--------

 

Abstract(추상화)

1. 메서드에 사용하려면 해당 클래스도 abstract로 선언

2. 해당 키워드로 선언된 메서드는 본문을 정의 할 수 없음

3. 자식 클래스는 반드시 부모의 abstract 메서드를 재정의 해야 함

    자식은 부모의 클래스를 빠트려선 안되고 모두 구현 되어야함

4. private 키워드를 사용 할 수 없음

5. 인스턴스화 되지 않음 (new 안됨)

 

추상 클래스는 인스턴화 되지 않고 추상클래스를 상속 받은 자식 클래스는 부모클래스에서 선언된 메서드를 반드시 구현 해야 한다

 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/abstract

 

abstract - C# 참조

abstract(C# 참조) 이 문서의 내용 --> abstract 한정자는 수정되는 항목에 누락되거나 불완전한 구현이 있음을 나타냅니다. abstract 한정자는 클래스, 메서드, 속성, 인덱서 및 이벤트와 함께 사용될 수

docs.microsoft.com

 

 

abstract 클래스에서 abstract를 달아주고, 

내부 구현 함수도 abstract 한정자를 붙여준다.

 

자식 클래스에서는  base. 으로 부모의 클래스 내부 함수를 사용할 수도 있고

abstract 한정자를 붙인 메서드는 override 한정자를 써서 재구현을 해준다.

abstract 한정자는 무조건 구현이 되어야한다. 

 

------

 

Interface(인터페이스)

1.인터페이스는 객체를 생성 할 수 없음

2. 맴버 변수를 포함할 수 없음

3. 접근 제한자는 public 만 지원

4. 인터페이스의 메서드를 자식 클래스에서 구현할 경우 반드시 public을 사용해야함

5. 다중 상속이 가능함 (클래스는 다중 상속이 불가능)

6. 인터페이스의 모든 메서드를 자식클래스에서 재정의 해야함

 

https://docs.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/interfaces

 

 

반응형