|
| 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 | + |
| 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 | + |
| 38 | + |
| 39 | + |
| 40 | + |
| 41 | + |
| 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 | +  |
| 67 | + |
| 68 | +  |
| 69 | + |
| 70 | +- 대표적인 메소드 |
| 71 | + |
| 72 | +  |
| 73 | + |
| 74 | +💁 **Set 인터페이스 그룹** |
| 75 | + |
| 76 | +- 리스트 구조는 순서가 있는 선형구조로 이루어져 있으나 Set 은 그렇지 않다 따라서 인덱스를 이용해 객체를 검색해 가져오는 메소드가 존재 하지 않는다. 대신 반복자인 Iterator를 제공한다. (List도 Iterator 지원) |
| 77 | +- 또한 중복 된 값을 저장 할 수 없으며 Null 값도 하나만 저장 할수 있다. |
| 78 | +- Set 인터페이스를 상속하는 대표적인 클래스는 HashSet 과 TreeSet 이 있다. |
| 79 | + |
| 80 | +  |
| 81 | + |
| 82 | +  |
| 83 | + |
| 84 | +- 대표적인 메소드 |
| 85 | + |
| 86 | +  |
| 87 | + |
| 88 | +--- |
| 89 | + |
| 90 | +💁 **Map 인터페이스** |
| 91 | + |
| 92 | +- Map은 Key값과 Value 값을 매핑 하여 사용해 Collection과 별도로 구현이 되어있으며, Set과 동일하게 중복값이 존재 할수 없다. |
| 93 | +- Map 인터페이스로 구현된 클래스 |
| 94 | + |
| 95 | +  |
| 96 | + |
| 97 | +- Map의 주요 메소드 |
| 98 | + |
| 99 | +  |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +## 컬렉션 알고리즘 |
| 104 | + |
| 105 | +- 모든 컬렉션의 알고리즘을 담당하며 Static으로 구현된 유틸리티 클래스이다. 주요 메소드는 (Sort, BinarySearch, get, Reverse, Swap, Copy, Min, Max 등이 있다.) |
| 106 | + |
| 107 | +  |
| 108 | + |
| 109 | +  |
| 110 | + |
| 111 | +  |
| 112 | + |
| 113 | +  |
| 114 | + |
| 115 | +  |
| 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