103

C #에서는 언제 인터페이스를 사용해야하며 언제 추상 클래스를 사용해야합니까? 결정 요인은 무엇입니까?


4 답변


125

추상 클래스의 장점은 다음과 같습니다.

  • 메소드의 기본 구현을 지정하는 기능
  • 함수에 불변 검사 추가
  • "인터페이스"메소드가 호출되는 방식을 약간 더 제어하십시오.
  • "무료"인터페이스에 관련되거나 관련이없는 행동을 제공 할 수있는 능력

인터페이스는 단순히 데이터 전달 계약이며 이러한 기능을 가지고 있지 않습니다. 그러나 일반적으로 유형은 한 클래스에서 파생 될 수 있지만 더 많은 수의 인터페이스를 구현할 수 있으므로 더 유연합니다.


  • @ JaredPar : 중복 된 질문에 답하는 것을 꺼리는 것 같습니다 (btw, 나는 당신을 얕보는 사람이 아닙니다) - Brann
  • @Brann, 이전에는 불행히도 그 행동을 보았습니다. OP에 대한 아래 표를 사용하는 것이 더 합리적이라고 생각됩니다. 속행을 검색하는 것은 책임입니다. - JaredPar
  • 이 답변에는 너무 많은 상향 신호가 포함되어있어 놀랍습니다. 응답자의 편견 ( "인터페이스가 단순한"다음에 인터페이스를 선호하는 단일 "그러나"다음에 나오는 장점의 4 개의 글 머리 기호가 뒤 따르는 "추상적 클래스의 장점")을 추상 클래스로 많이 보여주는 것으로 보인다 실제로 추상 클래스와 인터페이스의 차이점을 설명하는 것 이상. 나는 응답자를 공격 할 뜻이 아니지만이 질문은 질문에 대한 최선의 정의를하는 좀 더 객관적인 방법으로 명시되어야합니다. - Matt
  • @Matt는 추상 클래스와 인터페이스 모두에 대한 모든 관련 사실을 제공하므로 왜 객관적이지 않을까요? 매우 좋은 대답이라고 생각합니다. - Gigi
  • @ Guffa의 대답은 각각을 사용해야 할 때 올바르게 설명 될 때 훨씬 더 나은 대답입니다. - James Z.

71

추상 클래스와 인터페이스는 의미 론적으로 다르지만 사용법은 겹칠 수 있습니다.

추상 클래스는 일반적으로 유사한 클래스의 건물 기초로 사용됩니다. 클래스에 공통적 인 구현은 추상 클래스에있을 수 있습니다.

인터페이스는 일반적으로 클래스의 기능을 지정하는 데 사용되며 클래스는 매우 유사하지 않아도됩니다.


7

고려해야 할 또 다른 사항은 다중 상속이 없기 때문에 클래스가 인터페이스 / 추상 클래스에서 구현 / 상속 할 수 있지만 다른 기본 클래스에서 상속받을 수있게하려면 인터페이스를 사용하는 것입니다.


5

진짜 질문은 인터페이스 또는 기본 클래스를 사용할지 여부입니다. 이것은 이전에 다뤘습니다.

C #에서 추상 클래스 (키워드 "abstract"로 표시된 클래스)는 단순히 객체를 인스턴스화 할 수없는 클래스입니다. 이는 단순히 기본 클래스와 인터페이스를 구별하는 것과 다른 목적을 제공합니다.

연결된 질문


관련된 질문

최근 질문