Skip to content

Commit 1e9b6dd

Browse files
committed
docs:자바 컬렉션 프레임워크 정리
1 parent d5a721f commit 1e9b6dd

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
---
2+
3+
# 컬렉션 프레임 워크 (JCF ( Java Collection Framework ))
4+
5+
---
6+
7+
## 컬렉션 프레임 워크란?
8+
9+
- 컬렉션 프레임 워크란?
10+
11+
- 컬렉션 프레임 워크란 여러 요소를 담을 수 있는 자료구조를 의미하며 배열과 유사하다고 생각 할 수 있지만 다른 특성을 가진다.
12+
- 가장 대표적인 차이점은 배열은 크기가 고정되어있지만 컬렉션은 그렇지 않다. 크기가 고정되어있지 않아 배열의 고정된 크기로 생길수있는 문제점을 해결해 줄수 있다.
13+
- ex) 배열의 크기 고정으로 인해 생길수 있는 처음에 정한 크기보다 더 큰 데이터를 넣을 시 오류가 발생하고, 데이터 삭제시 인덱스는 비지만 메모리값은 낭비가 되는 문제점들을 보완 할수 있다.
14+
- 대표적으로는 List, Map, Stack, Queue 등이 있다.
15+
16+
**프레임 워크의 구성 위치**
17+
18+
- 컬렉션 인터페이스 : 모든 컬렉션 인터페이스는 java.util 패키지에 포함 되어있다.
19+
20+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0ce0c0ee-aad9-46df-8dbb-18169c811db6/_2021-04-27__11.13.18.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0ce0c0ee-aad9-46df-8dbb-18169c811db6/_2021-04-27__11.13.18.png)
21+
22+
- 컬렉션 클래스 : 모든 컬렉션 클래스는 java.util or java.utl.concurrent 패키지에 포함된다. (인터페이스에 대한 구현 클래스)
23+
- 컬렉션 기능 : 검색, 정렬, 셔플등의 기능을 지원.
24+
25+
---
26+
27+
## 컬렉션 인터페이스
28+
29+
- 컬렉션 인터페이스 들은 제네릭으로 구현 하여 컴파일시 체크 단계를 거치게 되어 에러를 줄일수있다.
30+
- 컬렉션 프레임워크의 대표적 인터페이스
31+
- List
32+
- Set
33+
- Map
34+
35+
List와 Set은 Collection 인터페이스에서 정의 하고 있으나 Map은 <Key,Value>값으로 이루어져있어 별도로 구현된다.
36+
37+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a26287fa-0b1c-447f-93d2-f6ff1fe6d3fd/_2021-04-27__11.49.44.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a26287fa-0b1c-447f-93d2-f6ff1fe6d3fd/_2021-04-27__11.49.44.png)
38+
39+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bec1033-b4b3-4592-81d2-38dcfa120e08/_2021-04-27__11.51.33.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bec1033-b4b3-4592-81d2-38dcfa120e08/_2021-04-27__11.51.33.png)
40+
41+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1b75a0b8-2891-42e9-811b-558d1c96e578/_2021-04-27__12.05.44.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1b75a0b8-2891-42e9-811b-558d1c96e578/_2021-04-27__12.05.44.png)
42+
43+
💁 **Collection 인터페이스 그룹**
44+
45+
- 직접 구현을 하지 않고 메서드만 포함하고 있다.
46+
- boolean add(E e)
47+
- boolean addAll(Collection<? extends E> c)
48+
- void clear()
49+
- boolean contains(Object o)
50+
- boolean containsAll(Collection<?> c)
51+
- boolean equals(Object o)
52+
- int hashCode()
53+
- boolean isEmpty()
54+
- Iterator<E> iterator()
55+
- int size()
56+
57+
등등..
58+
59+
(각 메소드에 대한 자세한 설명은 생략 하겠습니다. 이름만 보고도 무슨 역할을 할지 알수있는 메소드명을 지을수 있도록 노력하자👍)
60+
61+
💁 **List 인터페이스 그룹**
62+
63+
- 컬렉션 프레임 워크를 상속 받고있는 List 컬렉션은 객체를 일렬로 늘어 놓은 배열과 유사한 구조를 가지고 있으며 검색, 삭제등의 기능을 제공한다.
64+
- List 컬렉션을 구성하는 대표적인 클래스 (ArrayList, LinkedList, Vector)
65+
66+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7cd2226-ace9-48b0-9939-39425125ab8a/_2021-04-27__12.04.23.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7cd2226-ace9-48b0-9939-39425125ab8a/_2021-04-27__12.04.23.png)
67+
68+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/662caacb-6966-47d3-bee5-29f5731fb64a/_2021-04-27__12.05.01.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/662caacb-6966-47d3-bee5-29f5731fb64a/_2021-04-27__12.05.01.png)
69+
70+
- 대표적인 메소드
71+
72+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/28d0bdca-ec79-4792-8dc1-03cc0ab7094d/_2021-04-27__12.16.15.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/28d0bdca-ec79-4792-8dc1-03cc0ab7094d/_2021-04-27__12.16.15.png)
73+
74+
💁 **Set 인터페이스 그룹**
75+
76+
- 리스트 구조는 순서가 있는 선형구조로 이루어져 있으나 Set 은 그렇지 않다 따라서 인덱스를 이용해 객체를 검색해 가져오는 메소드가 존재 하지 않는다. 대신 반복자인 Iterator를 제공한다. (List도 Iterator 지원)
77+
- 또한 중복 된 값을 저장 할 수 없으며 Null 값도 하나만 저장 할수 있다.
78+
- Set 인터페이스를 상속하는 대표적인 클래스는 HashSet 과 TreeSet 이 있다.
79+
80+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a9f14a9-3ded-4a4a-b4cd-a91076009ce5/_2021-04-27__12.11.42.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a9f14a9-3ded-4a4a-b4cd-a91076009ce5/_2021-04-27__12.11.42.png)
81+
82+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/009cf03a-f594-40b0-8141-482c801a7644/_2021-04-27__12.13.46.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/009cf03a-f594-40b0-8141-482c801a7644/_2021-04-27__12.13.46.png)
83+
84+
- 대표적인 메소드
85+
86+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c90386c1-6864-4d2a-a5f4-2f92ede36b48/_2021-04-27__12.14.36.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c90386c1-6864-4d2a-a5f4-2f92ede36b48/_2021-04-27__12.14.36.png)
87+
88+
---
89+
90+
💁 **Map 인터페이스**
91+
92+
- Map은 Key값과 Value 값을 매핑 하여 사용해 Collection과 별도로 구현이 되어있으며, Set과 동일하게 중복값이 존재 할수 없다.
93+
- Map 인터페이스로 구현된 클래스
94+
95+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9c09e86a-99e1-46bb-850d-24739bf8dbd0/_2021-04-27__12.22.15.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9c09e86a-99e1-46bb-850d-24739bf8dbd0/_2021-04-27__12.22.15.png)
96+
97+
- Map의 주요 메소드
98+
99+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ad88ad29-76de-4f23-90a0-734af25d54c3/_2021-04-27__12.32.38.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ad88ad29-76de-4f23-90a0-734af25d54c3/_2021-04-27__12.32.38.png)
100+
101+
---
102+
103+
## 컬렉션 알고리즘
104+
105+
- 모든 컬렉션의 알고리즘을 담당하며 Static으로 구현된 유틸리티 클래스이다. 주요 메소드는 (Sort, BinarySearch, get, Reverse, Swap, Copy, Min, Max 등이 있다.)
106+
107+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56a17939-ba03-45c4-b3a4-36d43518785c/_2021-04-27__1.01.49.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56a17939-ba03-45c4-b3a4-36d43518785c/_2021-04-27__1.01.49.png)
108+
109+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4dc488a8-8bce-41b8-8269-ac80d0044b13/_2021-04-27__1.01.56.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4dc488a8-8bce-41b8-8269-ac80d0044b13/_2021-04-27__1.01.56.png)
110+
111+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2d268287-0afa-41cc-b0ff-7f0156b6b71a/_2021-04-27__1.02.05.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2d268287-0afa-41cc-b0ff-7f0156b6b71a/_2021-04-27__1.02.05.png)
112+
113+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/55bfdd8f-a04a-4043-949d-1fecd655b6b2/_2021-04-27__1.02.17.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/55bfdd8f-a04a-4043-949d-1fecd655b6b2/_2021-04-27__1.02.17.png)
114+
115+
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b28b80d1-a14f-4009-a77c-c56225f2cfb5/_2021-04-27__1.02.26.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b28b80d1-a14f-4009-a77c-c56225f2cfb5/_2021-04-27__1.02.26.png)
116+
117+
---
118+
119+
## 컬렉션 프레임워크의 모범 사례
120+
121+
필요에 따라 상황에 맞는 컬렉션을 선택해야 된다.
122+
123+
- 크기(size)가 고정되어 있다면 ArrayList보다 **Array**를 사용하라.
124+
- 맵에 삽입된 순서대로 iterate를 하고 싶으면 **TreeMap**을 사용하는 것이 좋다.
125+
- 중복을 허용하고 싶지 않으면 **Set**을 사용하면 된다.
126+
- 몇몇 컬렉션 클래스들을 초기 용량을 지정할 수 있다. 만약 저장할 요소들의 사이즈를 알 경우에 **초기 용량**을 지정함으로써 rehashing이나 resizing이 일어나는 것을 회피할 수 있다.
127+
- 코드를 작성할 때, 구현 클래스가 아닌 **인터페이스**를 기반으로 작성해야 나중에 구현체를 변경할 때 코드를 재작성하는 수고를 줄일 수 있다.
128+
- 런타임에 발생할 수 있는 ClassCastException을 회피하려면 항상 **제네릭(Generics)을** 사용해서 type-safety 한 상태를 유지하라.
129+
- 맵에 키를 사용할 때 JDK에서 제공하는 **immutable** 클래스를 사용하여 사용자 클래스에서 hashCode()와 equals() 구현할 필요가 없게 하라
130+
- 읽기 전용 및 동기화, 빈 컬렉션 등을 만들 때는 자신만의 구현으로 생성하지 말고 Collections에서 제공하는 **유틸리티 클래스**를 사용하라. 이는 코드 재사용성을 높여주고 안정적이며 유지보수 비용을 줄여 준다.
131+
132+
[https://gbsb.tistory.com/247](https://gbsb.tistory.com/247) ( 작성자 분 )
133+
134+
---
135+
136+
137+
138+
## Reference
139+
140+
[https://gbsb.tistory.com/247](https://gbsb.tistory.com/247)
141+
142+
[https://coding-factory.tistory.com/550](https://coding-factory.tistory.com/550)
143+
144+
[https://docs.oracle.com/javase/9/docs/api/java/util/List.html](https://docs.oracle.com/javase/9/docs/api/java/util/List.html)

0 commit comments

Comments
 (0)