2007/06/29 - [프로그래밍/Silverlight] - 다음 버전의 Silverlight에서 Generic이 아닌 컬렉션은 제거된다.
에서도 얘기했었지만, Jesse Liberty의 Tip of the Day - Time to move to Generic Collections for Silverlight에 의하면 실버라이트 2.0에서는 드디어 Non-generic Collections가 멸종되는 것이 확정된 것 같네요. 거의 반년만의 일이군요^^

C#에 Generic이 등장한 이후로 사실상 ArrayList와 같은 object 타입에 대한 컬렉션은 성능상, 문법상, 가독성상 어떤 면에서도 장점이 없게 되었죠. Generic의 적극적인 권장을 프레임워크 자체에서 강제하는 것은 환영 할 만한 일인 것 같아요. 게다가 Non-Generic 타입들을 프레임워크에서 제거하면서 아주 작겠지만 그만큼 코어도 가벼워질테고요.

여러분은 어떻게 생각하세요? 혹시 멸종 위기의 Non-Generic 컬렉션들을 보호하자는 운동이 일지는 않겠죠? ^^;
신고
Posted by gongdo
BaseType, Collctions 등을 관리하는 BCL Team Blog(http://blogs.msdn.com/bclteam/)에 의하면 Non-Generic 컬렉션들은 실버라이트에서 제거된다고 합니다.(http://blogs.msdn.com/bclteam/archive/2007/06/26/non-generic-collections-to-be-removed-from-silverlight-inbar-gazit.aspx)

하지만 기존에 이런 컬렉션을 사용하는 코드를 위해 obsolete 딱지를 붙여준다는 군요. Non-Generic컬렉션을 사용할 경우 컴파일러가 경고를 띄울 겁니다. 이 결정은 System.Collections 네임스페이스 내의 모든 형식에 적용됩니다.
이런 강경한(?) 결정을 내린 이유로는 성능이나 코드의 완성도 면도 있지만 무엇보다 실버라잇은 가벼운 다운로드 사이즈를 유지해야 하기 때문이라는 군요.
왜 Generic 버전의 컬렉션을 사용해야 하는가는 http://blogs.msdn.com/bclteam/archive/2007/06/25/bcl-refresher-converting-the-non-generic-collections-inbar-gazit.aspx 여기를 참고.

다음 타입들은 완전히 제거 될 예정이에요. 혹시라도 이런 타입을 사용한다면 Generic 버전으로 컨버전 하셔야 합니다.
  • ArrayList
  • BitArray
  • CaseInsensitiveComparer
  • CaseInsensitiveHashCodeProvider
  • CollectionBase
  • Comparer
  • CompatibleComparer
  • DictionaryBase
  • EmptyReadOnlyDictionaryInternal
  • Hashtable
  • IHashCodeProvider
  • KeyValuePairs
  • ListDictionaryInternal
  • Queue
  • ReadOnlyCollectionBase
  • SortedList
  • Stack
  • 하지만 대부분의 non-Generic Interface는 유지한다는 군요.
  • IEnumerator
  • IEnumerable
  • ICollection
  • IComparer
  • IDictionary
  • IDictionaryEnumerator
  • DictionaryEntry
  • IEqualityComparer
  • IList
  • 이 결정은 어디까지나 실버라잇에 한 한거고 다음 버전의 .NET Framework(3.5) 등에서 적용될지 여부는 확실치 않은 것 같네요(아마 다른 닷넷에서는 그대로 남겨둘 듯..) 제 경우에는 Generic의 강력함을 좋아하는 편이라 전 닷넷 프레임웍에 적용해버려도 좋다고 생각하지만요.
  • Generic 컬렉션 중에서도 일부 타입은 제거된다고 하는군요.
    Queue<T>, Stack<T>, LinkedList<T> 인데, 이 타입들은 사실List<T>의 변형이기도 하고 각 타입의 구현은 비교적 간단하기 때문에 런타임 용량을 고려하여 제거된다고 해요.

    앗! LinkedList<T>는 가끔 유용하게 쓰던건데... 이건 쬐끔 아쉽네요. 말한대로 구현이 어렵진 않지만요.

    신고
    Posted by gongdo


    티스토리 툴바