Collection Framework 이란?
1. collection
2. map
>> 크게 이 두 가지를 만들기 위한 인터페이스들, 인터페이스를 구현한 클래스들, 그리고 관련 알고리즘.
( A framework, by definition, is a set of interfaces that force you to adopt some design practices.)
Framework는 쉽게 말하면 인터페이스 집합으로, 개발자의 설계 구현을 도와주는 밑바탕이라 생각하면 됨.
즉, collection framework는 collection 자료구조들을 구현할 수 있도록 도와주는 인터페이스 도구들이다.
우리는 이제 이 framework에서 깔아준 밑바탕 인터페이스들과 이걸 implement한 클래스들(ArrayList, LinkedList)를 이용해서 원소를 추가, 삭제, 삽입, 조회 등을 쉽게 할 수 있음.
The Java Collection Framework package (java.util) contains:
A set of interfaces,
Implementation classes, and
Algorithms (such as sorting and searching).
>> C++의 Collection Library는 STL(Standard Template Library)
Collection Framework is as shown below:
[출처] http://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html#zz-2.
1) Collection
Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다
배열과 비슷하지만, 원소들을 계속 넣을 수 있는 봉투(resizable)
(ex: Array List, Queue, Stack, Linked List … )
>> 배열과의 차이점
- 크기에 제한이 없다
new int[4]하면 4개 공간밖에 못쓰지만
collection은 공간이 계속 필요한 만큼 추가될 수 있음
>> Collection의 종류 – 크게 두 가지
1. list
>> 원소들을 넣을 때 순서가 있는 collection을 list라고 한다
2, set
>> 수학적 의미의 집합의 개념으로 원소를 포함.
- 동일한 내용의 원소 집어넣을 수 없음 (집합의 개념이니까)
- list에는 중복된 내용 들어갈 수 있음.
>> 따라서, 중복된 원소들을 원치 않을 때에는 set을 사용
>> 데이터의 입출력 순서가 중요한 경우에는 list를 사용
2) Map
- key(유일한 값)와 value(중복될 수 있음)의 쌍
ex) id/password, 주민번호/이름.
Id, 주빈번호는 중복되면 안됨(유일한 값), but password, 이름은 중복되어도 상관없음(value)
그림 출처: http://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html
Iterable<E> - 가장 상위 인터페이스!
Iterable<E> - iterator()메소드! - Iterator<E> 객체가 반환됨
Iterator<E> 인터페이스 객체: 콜렉션 안의 원소 하나하나에 접근하게 해주는 역할
List<E>는 인터페이스 - 인터페이스자체는 객체생성 ㄴㄴ
-> 이걸 implement한 클래스가 객체가 될 수 있는 것!
-> 그걸 구현한게 Abstract list 밑의 [ArrayList★], Vector, Stack, [LinkedList★]
>>왜 인터페이스로 만든거지? 여러 가지 특색을 가진 자료구조들이 같은 기능을 하는 경우가 많기 때문에.
이들의 공통적인 기능들을 인터페이스로 묶어줌.
가장 상위 인터페이스인 Iterable, 그 아래 Collection은 가장 추상적이고
그 아래의 List, Queue, Set 등 하위 인터페이스로 내려갈수록 구체적이고 특징이 드러남
ex) ArrayList 와 LinkedList는 둘 다 순서가 있는 자료구조 a 따라서 List 인터페이스로 구현함.
+) Collection 사용 예제 (ArrayList) --> http://blog.naver.com/evella/90195374603
'Back-end > JAVA & Spring' 카테고리의 다른 글
[Java] ExecutorService를 사용하는 방법 (0) | 2021.05.11 |
---|---|
[Java] Future 사용 방법 (0) | 2021.05.11 |
[Java] 문자 Stream : InputStreamReader / OutputStreamWriter (0) | 2021.05.11 |
[Java] StringBuilder 사용법 및 사용하는 이유 (0) | 2021.05.11 |
[Java] 보조 스트림 : 문자 변환 보조 스트림 : OutputStreamWriter (0) | 2021.05.11 |
댓글