비고
이 콘텐츠는 프레임워크 디자인 지침: 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, 2판에서 Pearson Education, Inc.의 권한으로 다시 인쇄됩니다. 이 버전은 2008년에 출판되었으며, 이후 세 번째 에디션에서 완전히 수정되었습니다. 이 페이지의 일부 정보는 오래된 것일 수 있습니다.
추상화는 계약을 설명하지만 계약의 전체 구현을 제공하지 않는 형식입니다. 추상화는 일반적으로 추상 클래스 또는 인터페이스로 구현되며 계약을 구현하는 형식의 필수 의미 체계를 설명하는 잘 정의된 참조 설명서 집합이 함께 제공됩니다. .NET Framework에서 가장 중요한 추상화 중 일부는 Stream, IEnumerable<T>, 및 Object와 같다.
추상화 계약을 지원하는 구체적인 형식을 구현하고 추상화에서 사용하는 프레임워크 API와 함께 이 구체적인 형식을 사용하여 프레임워크를 확장할 수 있습니다.
시간 테스트를 견딜 수 있는 의미 있고 유용한 추상화는 디자인하기가 매우 어렵습니다. 가장 큰 어려움은 올바른 멤버 집합을 얻는 것입니다. 추상화에 멤버가 너무 많으면 구현하기가 어렵거나 불가능해집니다. 약속된 기능에 대한 멤버가 너무 적으면 많은 흥미로운 시나리오에서 쓸모가 없습니다.
프레임워크에 너무 많은 추상화가 있으면 프레임워크의 유용성에도 부정적인 영향을 미칩니다. 추상화가 구체적인 구현과 추상화에서 작동하는 API의 더 큰 그림에 어떻게 부합하는지 이해하지 못하는 경우가 많습니다. 또한 추상화와 해당 멤버의 이름은 반드시 추상적이므로 사용의 광범위한 컨텍스트를 먼저 이해하지 않고도 암호화되고 접근이 불가능한 경우가 많습니다.
그러나 추상화는 다른 확장성 메커니즘들이 종종 따라오지 못하는 매우 강력한 확장성을 제공합니다. 플러그 인, 제어 반전(IoC), 파이프라인 등과 같은 많은 아키텍처 패턴의 핵심입니다. 또한 프레임워크의 테스트 용이성에 매우 중요합니다. 좋은 추상화는 단위 테스트를 위해 많은 종속성을 스텁할 수 있게 합니다. 요약하자면, 추상화는 최신 개체 지향 프레임워크의 풍부한 요구 사항을 담당합니다.
❌ 추상화에 사용되는 여러 가지 구체적인 구현 및 API를 개발하여 테스트하지 않는 한 추상화는 제공하지 마세요.
✔️ 추상화 디자인 시 추상 클래스와 인터페이스 중에서 신중하게 선택합니다.
✔️ 추상화의 구체적인 구현에 대한 참조 테스트를 제공하는 것이 좋습니다. 이러한 테스트를 통해 사용자는 구현이 계약을 올바르게 구현하는지 여부를 테스트할 수 있습니다.
Microsoft Corporation의 일부 저작권 2005, 2009. 모든 권리 보유.
프레임워크 디자인 지침에서 Pearson Education, Inc.의 권한으로 재인쇄 : 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, Krzysztof Cwalina 및 Brad Abrams의 제2판, Microsoft Windows 개발 시리즈의 일환으로 Addison-Wesley Professional이 2008년 10월 22일 출판했습니다.