[abstract 추상]
abstract 한정자
: 불완전한 구현이 있음을 나타냄
abstract class (추상 클래스)
: 추상 클래스를 상속받는 클래스는 해당 기능(추상 메서드)을 구현해야합니다.
-> 클래스 자체에서 인스턴스화되지 않고 상속받는 기본 클래스로만 사용되고 파생된 클래스에서 구현해야합니다.
-> seal을 할수 없음 = 다른 클래스가 상속 할 수 있음
특징
1. 인스턴스화 할수 없음
2. 추상 메서드 및 접근자 포함될 수 있음
BasePage를 추상클래스로 구현하고 MainPage에서 상속한 다음 상속된 클래스를 인스턴스화 하였습니다
Open 이라는 abstract method는 구현부가 없지만
Next 이라는 구현된 메서드를 포함할 수 있습니다.
[interface]
interface
: 인터페이스는 기본 구성을 정의합니다.
interface class
: 인터페이스를 구현하는 클래스는 해당 기능을 구현해야합니다.
-> 마찬가지로 자체로 인스턴스화 할 수 없습니다.
-> 다중상속이 가능합니다.
(상속과 구현의 차이) - 인터페이스는 상속이 아니고 구현임
추상클래스와 인터페이스의 또다른 차이점은 다중상속에 있다.
클래스는 일반적으로 자식 클래스가 여러 부모 클래스를 상속하는 다중상속은 불가능하다.
인터페이스는 근본적으로 상속의 개념이아니라 구현이다.
인터페이스를 구현하는 클래스에서 기본 인터페이스에 정의된 멤버들을 구현한다.
interface ISword
{
string Damage { get; set;}
void Attact();
}
interface IShield
{
string DefensivePower { get; set;}
void Defend();
}
class Knight : ISword, IShield
{
public string Damage { get; set; }
public string DefensivePower { get; set; }
public void Attact()
{
}
public void Defend()
{
}
}
인터페이스를 구현하는 Knight 클래스는 ISword와 IShield 두가지 인터페이스를 받아서 다중으로 구현한다.
이렇게 기능을 따로 분리하여 정의하고 클래스에서 조합하여 구현할수있기때문에 추상클래스가 가지는 한계점을 극복한다.
🤔 C#8.0 이상부터의 인터페이스와 추상 클래스의 모호함 🔽🔽🔽
ISampleInterface를 ImplementationClass에서 구현하고 있는 모습이다.
다만 특이점이 PrintMethod는 원래 오류가 나야하는데 에러가 안났다.
이유는 C# 8.0부터 인터페이스 내의 구현을 지원하는데, 내 환경이 C# 9.0라서 에러가 발생하지 않았다.
이런 경우면 다중 상속시 충돌이 발생할 수 있다 (인터페이스 자체에서 구현한 내용이 있기 때문)
원래는 이렇게 기본 인터페이스에서 구현이 불가능하다.
interface는 원래 구현부가 없기 때문에 구현하는쪽에서 구체적인 정의를 해줘야한다
추상클래스에서는 추상 메소드는 구현없이 동작에 대한 정의를 할수있고 구현된 일반 메서드를 포함하여 일부에 대해서만 강제 구현을 가능하게 한다.
그에 반해 인터페이스는 구현없는 메서드만 전달 가능한 개념이다. 다만 C# 8.0 부터는 구현부가 포함 가능함으로 그 차이가 좀더 모호해질것 같다.
공부가 부족했던것 같아서 추가로 정리해봤습니다!
참고자료
https://www.bytehide.com/blog/abstract-class-vs-interface-csharp
https://blog.naver.com/skyarro/120095630095
추가로 공부할 것
멤버변수(인스턴스내의 변수)와 클래스변수(static)
상속과 구현의 차이
클래스 다중상속과 죽음의 다이아몬드
'공부' 카테고리의 다른 글
[TIL][처음 배우는 c# 프로그래밍] 241218 1.클래스 (1) | 2024.12.19 |
---|---|
[TIL][C++, 게임 프로그래밍] 241206~17 4.TextRPG (0) | 2024.12.17 |
gitbook-cli 설치 시 TypeError: cb.apply is not a function 에러 해결 (0) | 2024.12.12 |
[TIL][C++, 게임 프로그래밍] 241204 3. 디버깅 (0) | 2024.12.05 |
[TIL][C++, 게임 프로그래밍] 241203 2. 스택 메모리와 스택 프레임 with 계엄령 (1) | 2024.12.04 |
댓글