규칙 ID: CA1002
분류: 디자인 규칙
메시지 레벨: 에러
확실도: 95%
원인: System.Collections.Generic.List<T> 타입을 외부로 노출시켰거나, 리턴 타입으로 사용하거나, 혹은 파라미터로 사용했을 때 이 규칙에 위반된다.
규칙 설명
System.Collections.Generic.List<T>는 성능을 위해서 디자인된 제네릭 컬렉션이며 상속성등은 고려되지 않았다. 그래서 어떤 가상 멤버도 그 안에 포함할 수가 없다. 아래의 제네릭 컬렉션은 상속성을 고려해서 디자인되었으므로, 리턴 타입/파라미터/외부 노출 형식에는 아래 타입들을 써야 할 것이다.
- System.Collections.ObjectModel.Collection<T>
- System.Collections.ObjectModel.ReadOnlyCollection<T>
- System.Collections.ObjectModel.KeyedCollection<Tkey, TItem>
원문: http://www.gotdotnet.com/team/fxcop/Docs/Rules/Design/DoNotExposeGenericLists.html
* System.Collections.Generic.List<T>는 MSDN을 보면 나와있듯이 ArrayList의 Generic 버전이라고 생각하면 된다. 즉, 동적으로 크기가 늘어나고 빠르게 접근할 수 있는 특정 구현 형태로 보면 될 것이다.
외부 노출/리턴 타입/파라미터 등은 각 클래스들이 관계를 맺는 방식에 영향을 줄 수 있다. 이런 곳에서 상속할 수 없는 특정 구현 형태를 사용함으로써 그것에 얽매이는 것은 매우 좋지 않다는 것이 바로 이 규칙이 말하는 바라고 생각된다.
'코드분석 규칙 > 디자인 규칙' 카테고리의 다른 글
[번역]디자인규칙2. 삭제가능한 필드가 있는 형식은 삭제가능해야 합니다 (0) | 2006.10.21 |
---|---|
[번역]디자인규칙1. 정적 멤버를 제네릭 형식으로 선언하지 마십시오 (0) | 2006.10.16 |
[Article]VSTS 코드 분석 디자인 규칙 (0) | 2006.10.14 |