[C#] 인터페이스와 추상클래스

Flaming Bun·2025년 4월 21일

C#

목록 보기
14/35

참고 영상: https://www.youtube.com/watch?v=Is2bdBpncHA&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=9

참고 사이트: https://dev-sm.tistory.com/3
https://russellstudio.tistory.com/24

🔥 다중 상속을 사용하지 않는 이유

1) 다이아몬드 문제

다중 상속을 허용하면 한 클래스가 두 개 이상의 부모 클래스로부터 동일한 멤버를 상속받을 수 있다.

이 경우, 같은 이름의 멤버를 가지고 있을 때 어떤 부모 클래스의 멤버를 사용해야 하는 지 모호해진다.

2) 설계 복잡성 증가

클래스 간의 관계가 복잡해져서 관계를 파악하기 어려워지고 코드의 유지 보수성이 저하될 수 있다.

3) 이름 충돌

여러 부모 클래스로부터 상속받은 멤버들이 이름이 충돌할 수 있다.

이러한 충돌을 해결하기 위해 충돌하는 멤버를 재정의해야 하거나 명시적으로 부모 클래스를 지정해야 할 수 있다.

4) 설계의 일관성과 단순성 유지

C#은 단일 상속을 통해 일관성과 단순성을 유지하고자 한다.

단일 상속을 통해 클래스 간의 관계를 명확하게 만들고 코드의 가독성과 이해도를 높일 수 있다.



🔥 인터페이스

1) 인터페이스 특징

  • 인터페이스를 상속하는 실체 클래스는 반드시 인터페이스에서 선언된 메소드를 모두 구현해야 한다.
  • 인터페이스는 클래스의 일종이 아니며, 클래스에 대한 제약 조건을 명시하는 것이다.
  • 인터페이스는 다중 상속을 지원한다.
  • 인터페이스에서는 접근한정자를 명시하지 않아도 된다. 단, 상속하는 클래스에서는 접근한정자를 명시해야 한다.

2) 인터페이스를 사용하는 이유

- 코드의 재사용성

인터페이스를 사용하면 다른 클래스에서 해당 인터페이스를 구현하여 동일한 기능을 공유할 수 있다.

인터페이스를 통해 다양한 클래스가 동일한 동작을 수행할 수 있으므로 코드의 재사용성이 향상된다.

- 다중 상속 제공

C#에서 클래스는 단일 상속만을 지원하지만, 인터페이스는 다중 상속을 지원합니다.

클래스가 여러 인터페이스를 구현함으로써 여러 개의 기능을 조합할 수 있습니다.

- 유연한 설계

인터페이스는 클래스에게 뼈대만 잡아주고 실제 구현은 클래스 내부에서 하기때문에 느슨한 결합이라고 할 수 있다.

클래스와 인터페이스 간에 느슨한 결합을 형성할 수 있다.

클래스는 인터페이스를 구현하기만 하면 되므로, 클래스의 내부 구현에 대한 변경 없이 인터페이스의 동작을 변경하거나 새로운 인터페이스를 추가할 수 있다.

3) 인터페이스 선언하기

  • interface 키워드를 이용하여 선언
  • 대개 interfaceI로 시작하는 이름으로 명명
  • 인터페이스는 (기본적으로) 메소드 구현을 갖지 않음
  • 인터페이스는 필드를 갖지 않음

⚔ 예시

interface ILogger
{
    void WriteLog(string log);
}


🔥 추상 클래스

1) 추상 클래스 특징

추상 클래스는 메소드의 구현을 가질 수 있음.(클래스와 같음)
추상 클래스에서 구현을 가지지 않는 메소드를 추상 메소드(Abstract Method)라고 한다.
추상 클래스의 파생 클래스는 추상 메소드를 반드시 구현해야 한다.
추상 클래스는 객체를 생성할 수 없음.(인터페이스와 같음)

2) 추상 클래스를 사용하는 이유

인터페이스를 제공하되 기본적인 구현을 함께 제공하고 싶을 경우 사용

3) 추상 클래스 선언하기

abstract class 키워드를 이용하여 선언
구현체를 갖지 않는 메소드는 abstract 한정자로 수식

⚔ 예시

abstract class AbstractBase
{
    public abstract void SomeMethod();
}

class Derived : AbstractBase
{
    public override void SomeMethod()
    {
        // Something
    }
}

📌 추상 클래스와 인터페이스 차이

비교추상 클래스인터페이스
메서드 구현메서드를 구현할 수 있다.메서드 구현을 포함할 수 없다.
다중 상속다중 상속 X다중 상속 O
선택 기준공통된 기본 기능을 갖고, 추상 메서드를 사용다중 상속이 필요하고, 구체적인 구현 없이 재정의 할 때 사용

0개의 댓글