728x90
🏆 목차.
🛒 서론
C# 프로그래밍에서 추상 클래스와 인터페이스 두 개념 모두 클래스의 설계 및 구현을 정의하고, 다형성(polymorphism)을 제공하는 데 사용됩니다. 이러한 특성으로 인해 어떤 상황에서 추상 클래스를 사용해야 하는지 인터페이스를 사용해야 하는지 헷갈리곤 합니다. 이번 글에서는 이 차이점과 특징에 대해 정리해 보겠습니다.
🎨 본론
추상 클래스 (Abstract Class)의 특징
- 부분 구현:
- 추상 클래스는 완전한 구현과 부분적인 구현을 모두 포함할 수 있습니다. 일부 메서드는 구현되고, 일부는 추상 메서드로 남아 서브클래스에서 구현해야 합니다.
- 멤버 변수:
- 추상 클래스는 멤버 변수(필드)를 가질 수 있습니다.
- 생성자:
- 생성자를 가질 수 있으며, 생성자를 통해 상태를 초기화할 수 있습니다.
- 상속:
- 한 클래스는 하나의 추상 클래스만 상속할 수 있습니다. 이는 다중 상속을 허용하지 않는다는 의미입니다.
- 접근 지정자:
- 메서드와 속성에 대해 다양한 접근 지정자(public, protected, private 등)를 사용할 수 있습니다.
추상 클래스 예시 코드
public abstract class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
public abstract void MakeSound();
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
public class Dog : Animal
{
public Dog(string name) : base(name) { }
public override void MakeSound()
{
Console.WriteLine("Woof! Woof!");
}
}
인터페이스 (Interface)의 특징
- 완전한 추상화:
- 인터페이스는 메서드, 속성, 이벤트의 서명만을 포함하며, 구현은 포함하지 않습니다. 모든 메서드는 추상 메서드입니다.
- 다중 상속:
- 클래스는 여러 인터페이스를 구현할 수 있습니다. 이는 다중 상속을 지원하는 효과를 제공합니다.
- 멤버 변수 없음:
- 인터페이스는 멤버 변수를 가질 수 없습니다. 상수(const)는 포함될 수 있습니다.
- 접근 지정자 없음:
- 인터페이스의 모든 멤버는 암시적으로 public입니다. 접근 지정자를 사용할 수 없습니다.
인터페이스 예시 코드
public interface IAnimal
{
string Name { get; set; }
void MakeSound();
void Sleep();
}
public class Dog : IAnimal
{
public string Name { get; set; }
public Dog(string name)
{
Name = name;
}
public void MakeSound()
{
Console.WriteLine("Woof! Woof!");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
🎯 결론
추상 클래스(Abstract Class) | 인터페이스(Interface) |
메서드를 완전히 또는 일부 구현 | 메서드를 선언만 가능. 구현은 불가 |
변수 및 필드 선언/사용 | 메서드와 프로퍼티 선언만 가능(필드는 제외) |
정적(static) 멤버 가능 | 정적 멤버 불가 |
생성자(constructor) 사용 가능 | 생성자 사용 불가 |
모든 액세스 한정자 가능(private, protected..) | 모든 멤버는 퍼블릭(public)으로 취급 |
728x90
'프로그래밍 > C#' 카테고리의 다른 글
[C#] LINQ의 특징 및 활용 방법 (0) | 2024.06.12 |
---|---|
[C# 8.0] switch 식 (0) | 2024.02.08 |
[C# 8.0] Null 병합 할당 연산자 ??= (0) | 2024.02.07 |
[C#] 가변길이 매개변수 : params (0) | 2023.11.10 |
[C#] 박싱과 언박싱 (0) | 2023.11.09 |