규칙 클래스 이름: DoNotExposeGenericList
규칙 ID: CA1002
분류: 디자인 규칙
메시지 레벨: 에러
확실도: 95%
원인: System.Collections.Generic.List<T> 타입을 외부로 노출시켰거나, 리턴 타입으로 사용하거나, 혹은 파라미터로 사용했을 때 이 규칙에 위반된다.
규칙 설명
System.Collections.Generic.List<T>는 성능을 위해서 디자인된 제네릭 컬렉션이며 상속성등은 고려되지 않았다. 그래서 어떤 가상 멤버도 그 안에 포함할 수가 없다. 아래의 제네릭 컬렉션은 상속성을 고려해서 디자인되었으므로, 리턴 타입/파라미터/외부 노출 형식에는 아래 타입들을 써야 할 것이다.
원문: http://www.gotdotnet.com/team/fxcop/Docs/Rules/Design/DoNotExposeGenericLists.html
* System.Collections.Generic.List<T>는 MSDN을 보면 나와있듯이 ArrayList의 Generic 버전이라고 생각하면 된다. 즉, 동적으로 크기가 늘어나고 빠르게 접근할 수 있는 특정 구현 형태로 보면 될 것이다.
외부 노출/리턴 타입/파라미터 등은 각 클래스들이 관계를 맺는 방식에 영향을 줄 수 있다. 이런 곳에서 상속할 수 없는 특정 구현 형태를 사용함으로써 그것에 얽매이는 것은 매우 좋지 않다는 것이 바로 이 규칙이 말하는 바라고 생각된다.
규칙 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 버전이라고 생각하면 된다. 즉, 동적으로 크기가 늘어나고 빠르게 접근할 수 있는 특정 구현 형태로 보면 될 것이다.
외부 노출/리턴 타입/파라미터 등은 각 클래스들이 관계를 맺는 방식에 영향을 줄 수 있다. 이런 곳에서 상속할 수 없는 특정 구현 형태를 사용함으로써 그것에 얽매이는 것은 매우 좋지 않다는 것이 바로 이 규칙이 말하는 바라고 생각된다.
'코드분석 규칙 > 디자인 규칙' 카테고리의 다른 글
[번역]디자인규칙3. 제네릭 목록을 노출하지 마십시오 (6) | 2007.02.21 |
---|---|
[번역]디자인규칙2. 삭제가능한 필드가 있는 형식은 삭제가능해야 합니다 (0) | 2006.10.21 |
[번역]디자인규칙1. 정적 멤버를 제네릭 형식으로 선언하지 마십시오 (0) | 2006.10.16 |
[Article]VSTS 코드 분석 디자인 규칙 (0) | 2006.10.14 |
TAG Fxcop,
Fxcop Design Rules,
Fxcop 디자인 규칙,
Static code analysis,
Visual Studio 2005,
Visual Studio 2005 Team System,
VS2005,
VSTS,
코드 분석
댓글을 달아 주세요
자바쪽도 JDK5부터 generic이 지원됬죠. 무지 좋습니다. 타입을 정의함으로써 내부적으로 메모리 할당이나 속도면에서 획기적으로 바뀌었으니까요.
2007.02.21 12:45 [ ADDR : EDIT/ DEL : REPLY ]그냥 List 보다 List<Integer> 이 더 관리측면에서는 더 좋죠. 물론 사용하는 측면에서도요. ^^
역시 서로 닮아가고 있군요..자바와 닷넷..ㅎㅎ
2007.02.21 15:21 신고 [ ADDR : EDIT/ DEL ]FAQ: Why does DoNotExposeGenericLists recommend that I expose Collection<T> instead of List<T>? [David Kean]
2007.02.21 14:12 [ ADDR : EDIT/ DEL : REPLY ]; http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx
위의 토픽에서도 잘 설명해 주고 있습니다. ^^
매번 좋은 자료 감사합니다. 그리고 방문해 주신 점도요^^
2007.02.21 15:22 신고 [ ADDR : EDIT/ DEL ]좋은 정보네요~ ^^
2007.03.28 16:09 [ ADDR : EDIT/ DEL : REPLY ]ㅎㅎ 방문해주셔서 감사합니다.
2007.03.31 00:44 신고 [ ADDR : EDIT/ DEL ]