Skip to content

Latest commit

Β 

History

History
164 lines (93 loc) Β· 7.3 KB

Collection Framework.md

File metadata and controls

164 lines (93 loc) Β· 7.3 KB

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection Framework)

μžλ°”μ—μ„œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λž€, λ‹€μˆ˜μ˜ 데이터λ₯Ό 쉽고 효과적으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” ν‘œμ€€ν™”λœ 방법을 μ œκ³΅ν•˜λŠ” 클래슀의 집합을 μ˜λ―Έν•œλ‹€. (λ°°μ—΄μ˜ 단점을 보완해쀀닀)

JDK 1.2 μ΄μ „κΉŒμ§€λŠ” μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ“€μ„ μ„œλ‘œ 각자 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν–ˆμœΌλ‚˜ JDK 1.2λΆ€ν„° μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬κ°€ λ“±μž₯ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μ»¬λ ‰μ…˜ ν΄λž˜μŠ€κ°€ μΆ”κ°€λ˜κ³  λͺ¨λ“  μ»¬λ ‰μ…˜ 클래슀λ₯Ό ν‘œμ€€ν™”λœ λ°©μ‹μœΌλ‘œ λ‹€λ£° 수 μžˆλ„λ‘ 체계화 λ˜μ—ˆλ‹€.

μ΄λŸ¬ν•œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λŠ” μžλ°”μ˜ μΈν„°νŽ˜μ΄μŠ€(interface)λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„λœλ‹€.

μ»¬λ ‰μ…˜ (Collection) : μ—¬λŸ¬ 객체(데이터)λ₯Ό 담을 수 μžˆλŠ” 자료ꡬ쑰, λ‹€μˆ˜μ˜ 데이터 κ·Έλ£Ή
ν”„λ ˆμž„μ›Œν¬ (Framework) : ν‘œμ€€ν™”, μ •ν˜•ν™”λœ 체계적인 ν”„λ‘œκ·Έλž˜λ° 방식

image

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ κ΅¬μ„±μš”μ†Œ

  • μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€ : java.util νŒ¨ν‚€μ§€ μ•ˆμ— 있음
  • μ»¬λ ‰μ…˜ 클래슀 : μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받고 java.util λ˜λŠ” java.util.concurrent νŒ¨ν‚€μ§€ μ•ˆμ— 있음
  • μ»¬λ ‰μ…˜ μ•Œκ³ λ¦¬μ¦˜ : 검색, μ •λ ¬, μ…”ν”Œκ³Ό 같은 κΈ°λŠ₯을 제곡

μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€(Collection Interface)

μ œλ„€λ¦­(Generics)으둜 ν‘œν˜„λ˜μ–΄ 컴파일 μ‹œμ μ—μ„œ 객체의 νƒ€μž…μ„ μ²΄ν¬ν•˜κΈ° λ•Œλ¬Έμ— μ—λŸ¬λ₯Ό μ€„μ΄λŠ”λ° λ„μ›€μ΄λœλ‹€.

μΈν„°νŽ˜μ΄μŠ€λ₯Ό 크게 3κ°€μ§€λ‘œ λΆ„λ₯˜ ν•  수 μžˆλ‹€.
Collection μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή / Map μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή / 기타 μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ 핡심 μΈν„°νŽ˜μ΄μŠ€(List/Set/Map)
List, Set μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받기 λ•Œλ¬Έμ— 두 μΈν„°νŽ˜μ΄μŠ€μ˜ 곡톡적인 뢀뢄을 Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•˜κ³  μžˆλ‹€.
반면 Map μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬μ‘°μƒμ˜ 차이(Key-Value)둜 인해 Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받지 μ•Šκ³  λ³„λ„λ‘œ μ •μ˜λœλ‹€.

  1. Collection μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή
  • Collection Interface

    직접적인 κ΅¬ν˜„μ€ μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©° λͺ¨λ“  μ»¬λ ‰μ…˜ ν΄λž˜μŠ€κ°€ κ΅¬ν˜„ν•΄μ•Όν•˜λŠ” λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•˜κ³ μžˆλ‹€.

  • List Interface (μˆœμ„œ O, 쀑볡 O)

    μˆœμ„œκ°€ μžˆλŠ” μ»¬λ ‰μ…˜μ΄λ©° 쀑볡 μš”μ†Œλ₯Ό 포함 ν•  수 있으며 인덱슀둜 λͺ¨λ“  μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

    ArrayList class, LinkedList classλŠ” List μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

image

  • Set Interface (μˆœμ„œ X, 쀑볡 X)

    쀑볡 μš”μ†Œλ₯Ό 포함할 수 μ—†μœΌλ©° 랜덀 μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•˜μ§€ μ•Šμ•„ iterator λ˜λŠ” foreachλ₯Ό μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό 탐색할 수 μžˆλ‹€.

    HashSet class, TreeSet class, LinkedHashSet classλŠ” Set μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

image

  • SortedSet Interface

    μš”μ†Œλ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μœ μ§€ν•˜λŠ” Set이닀.

    TreeSet class λŠ” SortedSet μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„ λ˜μ—ˆλ‹€.

  • Queue Interface

    Queue μΈν„°νŽ˜μ΄μŠ€λŠ” μ²˜λ¦¬ν•˜κΈ° 전에 μš”μ†Œλ₯Ό λ³΄μœ ν•˜λŠ” 데에 μ‚¬μš©λœλ‹€. κΈ°λ³Έ μ»¬λ ‰μ…˜ μž‘μ—… 외에도 μ‚½μž…, μΆ”μΆœ 및 검사 μž‘μ—…μ„ μ œκ³΅ν•œλ‹€.

    일반적으둜 QueueλŠ” μš”μ†Œλ₯Ό FIFO λ°©μ‹μœΌλ‘œ μ •λ ¬ν•˜λ©° μ˜ˆμ™Έμ—λŠ” μš°μ„ μˆœμœ„ 큐가 μžˆλ‹€.

    PriorityQueue classλŠ” QueueμΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

  • Deque Interface

    μ–‘μͺ½ 끝에 μš”μ†Œ μ‚½μž… 및 제거λ₯Ό μ§€μ›ν•œλ‹€. double ended queue의 μ•½μžμ΄λ©° 데크라고 μ½λŠ”λ‹€.

    ArrayDeque classλŠ” Deque μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

  1. Map μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή
  • Map Interface (μˆœμ„œ X, 쀑볡(ν‚€ X, κ°’ O))

    Map μΈν„°νŽ˜μ΄μŠ€λŠ” 킀와 값을 λ§€ν•‘ν•œλ‹€. 쀑볡 ν‚€κ°€ μ‘΄μž¬ν•  수 μ—†μœΌλ©° 각 ν‚€λŠ” ν•˜λ‚˜μ˜ κ°’λ§Œ 맀핑 ν•  수 μžˆλ‹€.

    HashMap class, TreeMap class, LinkedHashMap classλŠ” Map μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

image

  • SortedMap Interface

    SortedMap μΈν„°νŽ˜μ΄μŠ€λŠ” μ˜€λ¦„μ°¨μˆœμ˜ ν‚€ μˆœμ„œλ‘œ λ§€ν•‘ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.

    TreeMap classλŠ” SortedMap μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€.

  1. 기타 μΈν„°νŽ˜μ΄μŠ€ κ·Έλ£Ή
  • Iterator Interface

    Iterator μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ μ»¬λ ‰μ…˜μ΄λ“  반볡적으둜 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

  • ListIterator Interface

    ListIterator μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λŠ λ°©ν–₯이든 λͺ©λ‘μ„ νƒμƒ‰ν•˜κ³  λ°˜λ³΅ν•˜λ©΄μ„œ λͺ©λ‘μ„ μ •ν•˜κ³ , λͺ©λ‘μ—μ„œ 반볡자의 ν˜„μž¬ μœ„μΉ˜λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.

  • Concurrent Interface

    • BlockingQueue μΈν„°νŽ˜μ΄μŠ€
    • TransferQueue μΈν„°νŽ˜μ΄μŠ€
    • BlockingDeque μΈν„°νŽ˜μ΄μŠ€
    • ConcurrentMap μΈν„°νŽ˜μ΄μŠ€
    • ConcurrentNavigableMap μΈν„°νŽ˜μ΄μŠ€

μ»¬λ ‰μ…˜ 클래슀 (Collection Class)

μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ κ΅¬ν˜„ 클래슀 제곡

μ»¬λ ‰μ…˜ νŠΉμ§•
ArrayList λ°°μ—΄κΈ°λ°˜, λ°μ΄ν„°μ˜ 좔가와 μ‚­μ œμ— 뢈리, 순차적인 μΆ”κ°€/μ‚­μ œλŠ” 제일 빠름, μž„μ˜μ˜ μš”μ†Œμ— λŒ€ν•œ 접근성이 뛰어남
Linked List μ—°κ²°κΈ°λ°˜, λ°μ΄ν„°μ˜ 좔가와 μ‚­μ œμ— 유리, μž„μ˜μ˜ μš”μ†Œμ— λŒ€ν•œ 접근성이 쒋지 μ•Šλ‹€.
HashMap λ°°μ—΄κ³Ό 연결이 κ²°ν•©λœ ν˜•νƒœ, μΆ”κ°€/μ‚­μ œ/검색/접근성이 λͺ¨λ‘ 뛰어남, κ²€μƒ‰μ—λŠ” 졜고 μ„±λŠ₯을 보인닀.
TreeMap μ—°κ²°κΈ°λ°˜, μ •λ ¬κ³Ό 검색(특히 λ²”μœ„κ²€μƒ‰)에 적합, 검색 μ„±λŠ₯은 HashMap 보닀 떨어진닀.
HashSet λ‚΄λΆ€μ μœΌλ‘œ HashMap을 μ΄μš©ν•΄μ„œ κ΅¬ν˜„
TreeSet λ‚΄λΆ€μ μœΌλ‘œ TreeMap을 μ΄μš©ν•΄μ„œ κ΅¬ν˜„
LinkedHashMap HashMap에 μ €μž₯μˆœμ„œ μœ μ§€κΈ°λŠ₯을 μΆ”κ°€
LinkedHashSet HashSet에 μ €μž₯μˆœμ„œ μœ μ§€κΈ°λŠ₯을 μΆ”κ°€
  • 일반적으둜 μ“°μ΄λŠ” 클래슀

    ArrayList, LinkedList, HashSet, TreeSet, PriorityQueue, ArrayDeque, HashMap, TreeMap, LinkedHashMap

  • Concurrent 클래슀

    CopyOnWriteArrayList, ConcurrentHashMap, CopyOnWriteArraySet

  • Legacy 클래슀

    Vector, Stack, Dictionary, Hashtable, Properties

  • Abstract 클래슀

    AbstractList, AbstractSequenctailList, AbstractSet, AbstractQueue

ArrayList와 Vector 차이
μ°Έκ³  : https://yeolco.tistory.com/94

HashMap/HashSet의 원리
μ°Έκ³  : https://papimon.tistory.com/74

μ»¬λ ‰μ…˜ μ•Œκ³ λ¦¬μ¦˜ (Collection Algorithm)

Collections ν΄λž˜μŠ€λŠ” λͺ¨λ“  μ»¬λ ‰μ…˜μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ λ‹΄λ‹Ήν•œλ‹€.

μœ ν‹Έλ¦¬ν‹° 클래슀둜써 static λ©”μ†Œλ“œλ‘œ κ΅¬μ„±λ˜μ–΄ 있고 μ»¬λ ‰μ…˜λ“€μ„ μ»¨νŠΈλ‘€ν•˜λŠ”λ°μ— μ‚¬μš©λœλ‹€.

μ£Όμ˜ν•  점은 μžλ°”μ˜ Collection은 μΈν„°νŽ˜μ΄μŠ€μ΄λ©°, CollectionsλŠ” ν΄λž˜μŠ€λΌλŠ” 점이닀.

  • μ •λ ¬(Sorting) : μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ μš”μ†Œκ°€ μ˜€λ¦„μ°¨μˆœμ΄ λ˜λ„λ‘ 리슀트λ₯Ό 재 정렬함
  • μ…”ν”Œλ§(Shuffling) : μ…”ν”Œλ§ μ•Œκ³ λ¦¬μ¦˜μ€ 랜덀으둜 λͺ©λ‘μ„ 재 정렬함 (μš°μ—°ν•œ κ²Œμž„μ„ κ΅¬ν˜„ν•  λ•Œ 유용)
  • 탐색 (Searching) : 이진 검색 μ•Œκ³ λ¦¬μ¦˜μ€ μ •λ ¬λœ λͺ©λ‘μ—μ„œ μ§€μ •λœ μš”μ†Œλ₯Ό 검색

Reference

https://steady-snail.tistory.com/74

https://prinha.tistory.com/entry/JAVA%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACjava-collection-framework