본문 바로가기
카테고리 없음

C# 추상 클래스와 인터페이스 한번에 알아보기 !

by tasiklee 2025. 2. 13.

안녕하세요! 이번 포스팅에서는 C#의 객체 지향 프로그래밍(OOP) 개념 중 중요한 **추상 클래스(Abstract Class)와 인터페이스(Interface)**에 대해 자세히 알아보겠습니다. 이 개념을 이해하면 C#의 코드 재사용성과 확장성을 더욱 높일 수 있습니다. 😊


추상 클래스(Abstract Class)란?

추상 클래스는 객체를 직접 생성할 수 없는 클래스로, 주로 공통 기능을 정의하고 이를 상속받아 구현하도록 강제하는 용도로 사용됩니다. 일반 클래스처럼 속성과 메서드를 가질 수 있지만, 완전히 구현되지 않은 **추상 메서드(Abstract Method)**를 포함할 수 있습니다.

추상 클래스 선언 방법

C#에서 추상 클래스는 abstract 키워드를 사용하여 선언합니다.

abstract class Animal
{
    public string Name;

    public void Eat()
    {
        Console.WriteLine("먹고 있습니다.");
    }
    
    public abstract void Speak(); // 추상 메서드 (구현 필요)
}

위 코드에서 Animal 클래스는 Eat()이라는 일반 메서드를 가지고 있지만, Speak()라는 구현되지 않은 추상 메서드를 포함하고 있습니다.

추상 클래스를 상속받아 사용하기

추상 클래스를 상속받은 자식 클래스는 반드시 추상 메서드를 구현해야 합니다.

class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("멍멍!");
    }
}

class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("야옹!");
    }
}

이제 DogCat 클래스를 생성하여 사용할 수 있습니다.

Dog dog = new Dog();
dog.Speak(); // 출력: 멍멍!

dog.Eat(); // 출력: 먹고 있습니다.

추상 클래스의 특징 정리

  • 객체를 직접 생성할 수 없음 (new 키워드 사용 불가)
  • 추상 메서드를 포함할 수 있음 (반드시 자식 클래스에서 구현 필요)
  • 일반 필드와 메서드도 가질 수 있음
  • 코드 재사용성과 유지보수를 높이는 데 유용

인터페이스(Interface)란?

인터페이스는 다중 상속을 가능하게 하고, 클래스가 특정 기능을 구현하도록 강제하는 역할을 합니다.

인터페이스에는 메서드, 속성, 이벤트 등의 멤버를 선언할 수 있지만, 구현은 하지 않습니다. 따라서 인터페이스를 구현하는 클래스는 모든 인터페이스 멤버를 반드시 구현해야 합니다.

인터페이스 선언 방법

C#에서 인터페이스는 interface 키워드를 사용하여 선언합니다.

interface IAnimal
{
    void Speak(); // 메서드 선언 (구현 X)
}

인터페이스의 메서드는 자동으로 public이며, abstract 키워드 없이도 반드시 구현해야 합니다.

인터페이스 구현하기

인터페이스를 구현하는 클래스는 :을 사용하여 해당 인터페이스를 구현할 수 있습니다.

class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("멍멍!");
    }
}

class Cat : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("야옹!");
    }
}

인터페이스를 사용하면 다형성을 쉽게 적용할 수 있습니다.

IAnimal myPet = new Dog();
myPet.Speak(); // 출력: 멍멍!

인터페이스의 특징 정리

  • 구현 코드 없이 메서드, 속성, 이벤트 등을 선언할 수 있음
  • 다중 구현이 가능함 (클래스는 여러 개의 인터페이스를 구현 가능)
  • 구현을 강제하여 일관성을 유지할 수 있음
  • 추상 클래스보다 유연성이 높음

추상 클래스 vs 인터페이스 차이점

구분추상 클래스인터페이스

객체 생성 불가능 불가능
메서드 구현 가능 (일반 메서드 포함) 불가능 (모든 메서드 선언만 가능)
다중 상속 불가능 (단일 상속만 가능) 가능 (여러 개의 인터페이스 구현 가능)
생성자 사용 가능 사용 불가능
접근 지정자 public, protected, private 가능 기본적으로 public (명시 필요 없음)

언제 추상 클래스를 사용할까?

  • 공통된 기능을 여러 클래스에서 공유해야 할 때
  • 기본 구현이 필요한 경우 (일부 메서드는 구현, 일부는 추상 메서드)
  • 클래스 간 관계가 명확하게 is-a 관계일 때 (예: BirdAnimal이다.)

언제 인터페이스를 사용할까?

  • 서로 다른 클래스들이 같은 기능을 구현해야 할 때
  • 다중 상속이 필요한 경우
  • 클래스 간 관계가 can-do 관계일 때 (예: CarIDriveable을 구현할 수 있다.)

결론

추상 클래스와 인터페이스는 C#에서 객체 지향 프로그래밍(OOP)의 핵심 개념입니다. 이를 적절히 활용하면 유지보수성, 확장성, 코드의 재사용성을 극대화할 수 있습니다.

추상 클래스는 공통된 기능을 제공하면서 일부 기능을 강제하고 싶을 때, 인터페이스는 여러 클래스에 공통된 기능을 강제하고 다중 상속을 가능하게 하고 싶을 때 사용하면 좋습니다.

이번 포스팅이 도움이 되셨다면 댓글과 좋아요 부탁드립니다! 😊