Share via


클래스와 인터페이스 간의 선택

인터페이스는 구현자가 제공해야 하는 멤버 집합에 대한 시그니처를 정의합니다. 인터페이스는 멤버에 대한 구현 세부 사항은 제공할 수 없습니다. 예를 들어, ICollection 인터페이스는 컬렉션 작업과 관련된 멤버를 정의합니다. 인터페이스를 구현하는 모든 클래스는 이러한 멤버에 대한 구현 세부 사항을 제공해야 합니다. 클래스는 여러 인터페이스를 구현할 수 있습니다.

클래스는 각 멤버에 대한 구현 세부 사항과 멤버 시그니처를 모두 정의합니다. Abstract(Visual Basic의 경우 MustInherit) 클래스는 멤버를 정의할 수 있고 반드시 필요하지는 않지만 구현 세부 사항을 제공할 수 있다는 점에서 인터페이스 또는 일반 클래스와 같이 작동할 수 있습니다. 추상 클래스가 구현 세부 사항을 제공하지 않는 경우 추상 클래스에서 상속되는 구체적인 클래스가 구현을 제공해야 합니다.

추상 클래스와 인터페이스는 모두 구현과 계약 구분을 지원하지만 인터페이스는 이후 버전에 새 멤버를 지정할 수 있는 반면 추상 클래스는 추가 기능을 지원하기 위해 필요한 경우 멤버를 추가할 수 있습니다.

인터페이스에 클래스를 정의합니다.

이후 버전의 라이브러리에서는 클래스에 새 멤버를 안전하게 추가할 수 있습니다. 기존 코드를 손상시키지 않고 인터페이스에 멤버를 추가할 수는 없습니다.

구현과 계약을 분리하려면 인터페이스 대신 abstract(Visual Basic의 경우 MustInherit) 클래스를 사용합니다.

값 형식의 다형 계층 구조를 제공해야 하는 경우 인터페이스를 정의합니다.

값 형식은 ValueType에서 상속되어야 하는데, ValueType에서만 상속될 수 있으므로 클래스를 사용하여 계약과 구현을 구분할 수 없습니다. 이러한 경우 값 형식에 다형 동작이 필요하면 인터페이스를 사용해야 합니다.

다중 상속과 유사한 효과를 얻도록 인터페이스를 정의할 수 있습니다.

형식이 다중 계약을 구현해야 하거나 계약이 다양한 형식에 적용되는 경우 인터페이스를 사용합니다. 예를 들어, IDisposable은 다양한 시나리오에서 사용되는 형식으로 구현됩니다. 삭제 가능한 기본 클래스에서 클래스를 상속해야 하는 경우 클래스 계층 구조가 너무 유연해집니다. MemoryStream과 같이 부모 클래스에서 스트림 기반 계약을 상속해야 하는 클래스는 이 기능을 수행할 수 없으므로 삭제가 가능합니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

참고 항목

개념

클래스와 구조체 간의 선택

기타 리소스

형식 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침