1. Virtual
- 클래스의 메서드나 속성을 파생클래스에서 재정의(override) 할 수 있게 허용
- 기본 구현이 존재하고 파생클래스에서 override 키워드를 붙여 재정의 할 수 있다.
public class BaseClass
{
public virtual void SomeMethod()
{
Console.WriteLine("BaseClass's SomeMethod");
}
}
public class DerivedClass : BaseClass
{
public override void SomeMethod()
{
Console.WriteLine("DerivedClass's SomeMethod");
}
}
2. Abstract
- 추상 클래스나 추상 메서드를 정의할 때 사용
▶ 추상 클래스
- 일부 메서드를 구현하고 나머지 메서드는 파생 클래스에서 구현하도록 설계된 클래스
- 직접 인스턴스화 할 수 없고 파생클래스를 만들어서 사용한다.
- 추상 클래스는 자식 클래스를 일반화하고 다형성을 구현하는 데 유용하다.
▶ 추상 메서드
- 추상 클래스나 인터페이스 내에서 선언되는 메서드로 선언만 존재하고 하위클래스에서 구현한다.
public abstract class Shape
{
public abstract double CalculateArea(); // 추상 메서드
}
public class Circle : Shape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public override double CalculateArea()
{
return Math.PI * radius * radius;
}
}
3. Interface
- 클래스가 특정 메서드와 속성을 구현하도록 함
- 구현 없이 선언만 존재한다. (상속받은 클래스에서 구현)
- 다중 상속이 가능하다.
interface IShape
{
double CalculateArea();
}
public class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double CalculateArea()
{
return Math.PI * radius * radius;
}
}
4. 추상 클래스 / 인터페이스 비교
▶ 공통점
- 선언만 있고 구현이 없다. (하위 클래스에서 구현한다)
- 인스턴스를 생성할 수 없다.
▶ 차이점
▷ 추상클래스
- 다중상속이 불가능하다.
- "kind of" (속한다는 개념)
- 상속을 위한 부모 클래스로 자식 클래스가 기능을 구체화하여 확장하는데 목적이 있다.
▷ 인터페이스
- 다중상속이 가능하다.
- "can do" (행동을 할 수 있다는 개념)
- 클래스를 만들 때 특정 메서드 구현을 강제하는 역할을 한다.
5. 오버라이딩 / 오버로딩
▶ 오버라이딩
- 부모클래스에서 정의한 메서드를 파생클래스에서 재정의
- override 키워드를 붙여 구현한다.
▶ 오버로딩
- 하나의 메서드 이름으로 여러 동작을 구현
- 같은 이름을 가진 메서드의 매개변수 자료형이나 개수를 다르게 해서 각각 다르게 동작하게 한다.
'✏️ 이론 > C#' 카테고리의 다른 글
| 델리게이트 (Delegate), 이벤트 (Event) (0) | 2023.12.05 |
|---|---|
| [ C# ] 자료구조 (스택, 큐, 딕셔너리, 해시테이블) (0) | 2023.09.05 |
| [ C# ] Object 타입, 박싱, 언박싱 (0) | 2023.09.05 |
| [ C# ] 자료구조 (Array, List, ArrayList) (0) | 2023.09.04 |
| [ C# ] 메모리 영역 (0) | 2023.03.25 |