개발자 노트

Collections정리 - Interfaces 본문

컴퓨터 언어/Java

Collections정리 - Interfaces

jurogrammer 2022. 6. 30. 23:39

관련 글

https://jurogrammer.tistory.com/172

Interfaces

https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html

개요

core collection의 interfaces는 서로 다른 타입의 collections들을 캡슐화합니다. 따라서 서로 다른 collections을 detail을 신경쓰지 않고 조작할 수 있게 되지요.

collection interface는 Java Collection Framework의 근간이라고 보시면 됩니다.

Interface 챕터에서는 collection interfaces의 효율적인 사용 방법에 대한 일반적인 가이드라인을 제공해줄 예정입니다.

유의할 점

Map은 Collection이 아닙니다.

말 그대로에요.

모든 Core collection은 Generic입니다.

  • collection을 선언할 때 collection에 들어갈 타입을 특정지어야 합니다.
  • 제너릭은 컴파일 타임에 collection에 넣을 객체가 올바른 타입인지 검증해줄 수 있도록 합니다.

Java 플랫폼에서 interface의 변형은 제공해주지 않습니다.

수 많은 core collection interfaces의 관리가 용이하도록, Java 플랫폼에서 interface의 변형은 제공해주지 않습니다. (ex: imuutable, fixed-size, append-only같은 특성들의 interface.) 대신에, 수정 작업은 선택입니다. 즉, 모든 operation을 구현하지 않았기 때문에 특정 operation을 호출할 경우 UnsupportedOperationException 을 던질 수 있습니다. 그래서 반드시 이를 문서화 해야죠. 정리하자면, 특정 collection interface를 구현해야 한다면, 필요한 것만 구현하라는 뜻입니다. 전부 다 구현하지 말고요.

한편으로, 자바 플랫폼의 일반적인 목적 구현체는 optional operations를 지원합니다.

UnsupportedOperationException의 예

sun.util.resources.ParallelListResourceBundle.KeySet.remove 메서드를 보시면, 다음처럼 사용되고 있습니다.

Core collection interfaces

  • Collection
    • collection 계층 구조의 루트에 해당합니다.
    • collection은 elements라고 할 수 있는 objects group을 나타냅니다.
    • 특정 collection은 중복을 허용할 수도 있고, 안할 수도 있고 어떤 collection은 순서를 보장할 수도 안할 수도 있습니다만, 자바 플랫폼은 collection의 구현체를 제공해주기 보다는 조금더 구체적인 interface의 구현체를 제공해줍니다.
      • UniqueCollection implement Collection 이라기 보단,
      • Set extends Collection ,HashSet implement Set 과 같은 형태로 제공해준다는 것이죠!
  • Set
    • duplicate elements가 없는 collection 입니다.
    • 수학적인 set을 모델링 했습니다.
  • List
    • ordered collection입니다. 또는 sequence collection 이라고도 부릅니다
    • duplicate elements를 지닐 수 있습니다.
    • 어디에 element를 삽입할 지, 특정 index로 element에 접근할 지 등, 정확히 컨트롤 할 수 있는 기능을 지닙니다.
  • Queue
    • processing하기 전, 데이터들을 보관하는데 사용되는 collection입니다.
    • Collection의 operations 이외에도 Queue에서 추가적인 삽입, 삭제, 탐색 operations를 제공합니다. (insertion, extraction, inspection)
    • Queue는 보통 FIFO 방식으로 elements 순서를 지닙니다만, Priority Queue같이 우선순위에 따라 순서가 달라질 수 있습니다. 따라서 각 큐마다 따라서 ordering properties를 반드시 특정지어야 합니다.
  • Deque
    • processing하기 전, 데이터들을 보관하는데 사용되는 collection 입니다.
    • Deque도 Queue와 동일한 추가적인 연산을 지원합니다.
    • FIFO 또는 LIFO 둘 다 사용됩니다.
    • 양 끝단에 elements들에 대하여 추가, 삭제, 탐색 연산을 수행할 수 있습니다.
  • Map
    • key를 value에 mapping하는 object 입니다.
    • 중복된 키를 지닐 수 없습니다.
    • Hashtable을 사용했었다면, Map에 친숙할 것입니다.

다음 두 core collection은 단순히 Set, Map의 sorted version 입니다.

  • SortedSet
    • 오름차순으로 elements를 지닙니다.
    • ordering에 대한 이점을 얻기 위해 추가적인 연산을 제공합니다.
    • naturally orderd sets에 사용 됩니다. (word lists, membership rolls 같은.)
  • SortedMap
    • key가 오름차순으로 유지되는 Map입니다.
    • key/value 쌍의 naturally ordered collections로 사용됩니다.
      • ex:) 사전, 전화번호부

어떻게 elements를 정렬된 상태로 유지할 수 있는 지는 Object Ordering section을 참고하시면 됩니다.

반응형

'컴퓨터 언어 > Java' 카테고리의 다른 글

Collection 정리 - Collection Interface  (0) 2022.07.06
Collection 정리 - Implementations  (0) 2022.07.04
Collection 정리  (0) 2022.06.30
Exception  (0) 2020.11.08
자바 메모리 구조  (0) 2020.05.19
Comments