728x90

🏆 목차.

  1. 서론
  2. 본론
  3. 결론

 

🛒 서론

C# 프로그래밍에서 추상 클래스와 인터페이스 두 개념 모두 클래스의 설계 및 구현을 정의하고, 다형성(polymorphism)을 제공하는 데 사용됩니다. 이러한 특성으로 인해 어떤 상황에서 추상 클래스를 사용해야 하는지 인터페이스를 사용해야 하는지 헷갈리곤 합니다. 이번 글에서는 이 차이점과 특징에 대해 정리해 보겠습니다.

 

🎨 본론

 

추상 클래스 (Abstract Class)의 특징
  1. 부분 구현:
    • 추상 클래스는 완전한 구현과 부분적인 구현을 모두 포함할 수 있습니다. 일부 메서드는 구현되고, 일부는 추상 메서드로 남아 서브클래스에서 구현해야 합니다.
  2. 멤버 변수:
    • 추상 클래스는 멤버 변수(필드)를 가질 수 있습니다.
  3. 생성자:
    • 생성자를 가질 수 있으며, 생성자를 통해 상태를 초기화할 수 있습니다.
  4. 상속:
    • 한 클래스는 하나의 추상 클래스만 상속할 수 있습니다. 이는 다중 상속을 허용하지 않는다는 의미입니다.
  5. 접근 지정자:
    • 메서드와 속성에 대해 다양한 접근 지정자(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)의 특징

  1. 완전한 추상화:
    • 인터페이스는 메서드, 속성, 이벤트의 서명만을 포함하며, 구현은 포함하지 않습니다. 모든 메서드는 추상 메서드입니다.
  2. 다중 상속:
    • 클래스는 여러 인터페이스를 구현할 수 있습니다. 이는 다중 상속을 지원하는 효과를 제공합니다.
  3. 멤버 변수 없음:
    • 인터페이스는 멤버 변수를 가질 수 없습니다. 상수(const)는 포함될 수 있습니다.
  4. 접근 지정자 없음:
    • 인터페이스의 모든 멤버는 암시적으로 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

+ Recent posts