728x90
virtual
- 역할 : 메서드, 속성(property), 이벤트 등을 자식 클래스에서 재정의할 수 있도록 허용하는 키워드이다.
- 사용 방법 : 부모 클래스에서 메서드나 속성에 virtual을 붙여서 정의하면, 자식 클래스에서 override 키워드를 통해 재정의를 할 수 있다.
- 특징 : virtual은 선택적 재정의를 허용하므로 반드시 재정의를 할 필요는 없다.
public class Parent
{
public virtual void message()
{
Console.WriteLine("Hi, I'm Parent.");
}
}
public class Child : Parent
{
public override void message()
{
Console.WriteLine("Hi, I'm Child.");
}
}
abstract
- 역할 : 클래스나 메서드를 선언할 때 사용되고, 특정 메서드를 반드시 자식 클래스에서 구현하도록 강제한다.
- 사용 방법 : abstract 메서드는 구현부가 없고, 메서드 선언부만 작성하게 된다. 이를 포함한 클래스도 abstract로 선언해야 한다.
- 특징 : abstract는 재정의를 강제하므로 자식 클래스에서 구현하지 않으면 컴파일 오류가 날 수 있다.
public abstract class Animal
{
public abstract void MakeSound(); // 선언만 하고 구현은 하지 않음
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("왈왈"); // 상속받은 자식 클래스에서 반드시 구현해야됨
}
}
interface
- 역할 : 클래스가 구현해야 할 메서드, 속성(property), 이벤트 등을 정의하는 일종의 계약이다. 인터페이스는 다중 상속을 지원하기 때문에 하나의 클래스에 여러 인터페이스를 구현할 수 있다.
- 사용 방법 : interface 키워드로 인터페이스를 정의하고, 클래스에서 ': 인터페이스 명' 으로 이를 구현한다.
- 특징 : 인터페이스에 포함된 모든 메서드와 속성은 구현부가 없고, public이다. 인터페이스는 다중 상속을 지원하기 때문에 다양한 기능을 조합하여 클래스에 구현할 수 있다.
public interface canFly
{
void Fly();
}
public interface canEat
{
void Eat();
}
public class Bird : canFly, canEat
{
public void Fly()
{
Console.WriteLine("Bird can fly.");
}
public void Eat()
{
Console.WriteLine("Bird can eat.");
}
}
요약
- virtual : 자식 클래스에서 선택적으로 재정의할 수 있는 메서드, 속성 등을 만들 때 사용
- abstract : 자식 클래스에서 반드시 구현해야 하는 메서드, 속성 등을 정의할 때 사용하며, 해당 부모 클래스도 abstract로 선언해야 함
- interface : 클래스가 구현해야 할 메서드나 속성을 계약으로 정의하며, 다중 상속을 지원하여 유연한 설계를 가능하게 함
(계약 : 클래스가 특정 기능을 미리 갖추도록 설계 상의 가이드라인 느낌)
728x90
'언어(C, C++, C#)' 카테고리의 다른 글
[C#] 접근 제한자(public, private, protected, internal 등) (0) | 2024.11.06 |
---|---|
[C#] 깊은 복사 / 얕은 복사 (Deep Copy / Shallow Copy) (2) | 2024.11.06 |
[C#] this (2) | 2024.11.05 |
[C#] object와 var (0) | 2024.11.04 |
[C#] C#의 Collection (0) | 2024.11.04 |