일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- exception
- design-pattern
- solid
- 겨울카카오인턴
- Network
- 로버트마틴
- Spring
- DesignPattern
- Pattern
- 자바
- 파이썬
- 큐
- 프로그래머스
- functional programming
- JavaScript
- Python
- 람다 칼큘러스
- Collection
- lambda calculus
- Collections
- Java
- JDBC
- 디자인패턴
- tcp
- 스택
- 백준
- 함수형 프로그래밍
- javscript
- Rails
- Eclipse
- Today
- Total
개발자 노트
Collections정리 - Interfaces 본문
관련 글
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 |