๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/Java

[Java] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋ฌธ: List, Set, Map ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ

by hyebin (Helia) 2025. 5. 28.
๋ฐ˜์‘ํ˜•

 


๋ชฉ์ฐจ

     

     

    Java๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ผ์ด ์ž์ฃผ ์ƒ๊น๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด๋งŒ์œผ๋กœ๋Š” ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์–ด๋ ต์ฃ .

     

    Java๋Š” ์ด๋Ÿฐ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(Collection Framework)๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ „์ฒด ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค์ธ List, Set, Map์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


    ๐Ÿ“ฆ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

    ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ + ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ฉํ•œ Java์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

     

    ๋ฐฐ์—ด๋ณด๋‹ค ํ›จ์”ฌ ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค

    • ๋™์  ํฌ๊ธฐ ์กฐ์ ˆ: ๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • ๋‚ด์žฅ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ œ๊ณต: ์ •๋ ฌ, ๊ฒ€์ƒ‰ ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ
    • ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค: ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ๊ฒ€์ฆ๋œ ์ž๋ฃŒ๊ตฌ์กฐ ์žฌ์‚ฌ์šฉ: ์•ˆ์ •์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

     

    ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰ฉ๋‹ˆ๋‹ค

    ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
    ์ธํ„ฐํŽ˜์ด์Šค List, Set, Map ๋“ฑ ํ•ต์‹ฌ ๊ทœ์•ฝ ์ •์˜
    ๊ตฌํ˜„ ํด๋ž˜์Šค ArrayList, HashSet, HashMap ๋“ฑ ๊ธฐ๋Šฅ ์ œ๊ณต
    ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค Collections, Arrays ๋“ฑ์„ ํ†ตํ•œ ์ •๋ ฌ/๋ณต์‚ฌ/๊ฒ€์ƒ‰ ์ง€์›

     

    ๐Ÿ”— ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์กฐ

    ์ปฌ๋ ‰์…˜์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค

    Collection (์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค)
    โ”œโ”€โ”€ List (์ˆœ์„œ๊ฐ€ ์žˆ๊ณ  ์ค‘๋ณต ํ—ˆ์šฉ)
    โ”‚   โ”œโ”€โ”€ ArrayList
    โ”‚   โ”œโ”€โ”€ LinkedList
    โ”‚   โ””โ”€โ”€ Vector
    โ”œโ”€โ”€ Set (์ค‘๋ณต ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)
    โ”‚   โ”œโ”€โ”€ HashSet
    โ”‚   โ”œโ”€โ”€ LinkedHashSet
    โ”‚   โ””โ”€โ”€ TreeSet
    โ””โ”€โ”€ Queue (FIFO ๊ตฌ์กฐ)
        โ”œโ”€โ”€ LinkedList
        โ””โ”€โ”€ PriorityQueue
    
    Map (๋ณ„๋„ ์ธํ„ฐํŽ˜์ด์Šค - Key-Value ์Œ)
    โ”œโ”€โ”€ HashMap
    โ”œโ”€โ”€ LinkedHashMap
    โ””โ”€โ”€ TreeMap
    ๐Ÿ’ก Map์€ Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

    ๐Ÿงฉ List, Set, Map ๊ฐœ๋… ๋น„๊ต

    ๐Ÿ“ List 

    • ์ˆœ์„œ ์žˆ์Œ, ์ค‘๋ณต ํ—ˆ์šฉ
    • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ๋™์  ํฌ๊ธฐ ์กฐ์ ˆ
    • ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด: ArrayList, LinkedList
    List<String> list = new ArrayList<>();
    list.add("Apple");
    list.add("Banana");
    list.add("Apple");  // ์ค‘๋ณต ํ—ˆ์šฉ
    
    System.out.println(list.get(0));  // "Apple" (์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ)
    System.out.println(list.size());  // 3

     

    ๐Ÿ”„ Set

    • ์ค‘๋ณต ํ—ˆ์šฉ X
    • ์ˆœ์„œ ๋ฏธ๋ณด์žฅ (๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)
    • ์ธ๋ฑ์Šค ์ ‘๊ทผ ๋ถˆ๊ฐ€
    • ์ง‘ํ•ฉ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ (ํ•ฉ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ ๋“ฑ)
    • ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด: HashSet, TreeSet
    Set<String> set = new HashSet<>();
    set.add("Apple");
    set.add("Banana");
    set.add("Apple");  // ์ค‘๋ณต - ์ถ”๊ฐ€๋˜์ง€ ์•Š์Œ
    
    System.out.println(set.size());  // 2 (์ค‘๋ณต ์ œ๊ฑฐ๋จ)
    // set.get(0);  // ์˜ค๋ฅ˜! Set์€ ์ธ๋ฑ์Šค ์ ‘๊ทผ ๋ถˆ๊ฐ€

     

    ๐Ÿ—‚๏ธ Map

    • Key-Value ์Œ์œผ๋กœ ์ €์žฅ
    • Key๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€, Value๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅ
    • ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ
    • ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด: HashMap, TreeMap
    Map<String, Integer> map = new HashMap<>();
    map.put("Apple", 1000);
    map.put("Banana", 1500);
    map.put("Apple", 1200);  // ๊ธฐ์กด ๊ฐ’ ์—…๋ฐ์ดํŠธ
    
    System.out.println(map.get("Apple"));  // 1200

     

    โš–๏ธ ์ฃผ์š” ํŠน์ง• ๋น„๊ต

    ํŠน์„ฑ
    List Set Map
    ์ค‘๋ณต ํ—ˆ์šฉ โœ… โŒ Key: โŒ, Value: โœ…
    ์ˆœ์„œ ์œ ์ง€ โœ… ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„ ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
    ์ธ๋ฑ์Šค ์ ‘๊ทผ โœ… โŒ โŒ (Key๋กœ ์ ‘๊ทผ)
    ์ฃผ์š” ๊ตฌํ˜„์ฒด ArrayList, LinkedList HashSet, TreeSet HashMap, TreeMap
    ์‚ฌ์šฉ ๋ชฉ์  ์ˆœ์ฐจ ๋ฐ์ดํ„ฐ, ์ธ๋ฑ์‹ฑ ์ค‘๋ณต ์ œ๊ฑฐ, ๊ณ ์œ  ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋น ๋ฅธ ์กฐํšŒ, ์—ฐ๊ด€ ๋ฐ์ดํ„ฐ ์ €์žฅ
    ์ ‘๊ทผ ๋ฐฉ์‹ ์ธ๋ฑ์Šค(index)๋กœ ์ ‘๊ทผ Iterator๋กœ ์ ‘๊ทผ key๋กœ value ์กฐํšŒ

    ๐Ÿ›  ์–ธ์ œ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์จ์•ผ ํ• ๊นŒ?

    List๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

    • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•  ๋•Œ
    • ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•  ๋•Œ
    • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ
    ์˜ˆ: ์‚ฌ์šฉ์ž ์ž‘์—… ์ด๋ ฅ, ์‡ผํ•‘ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก

     

     Set์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

    • ์ค‘๋ณต ์—†๋Š” ์œ ์ผํ•œ ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์ˆ˜ํ•™์  ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
    ์˜ˆ: ํƒœ๊ทธ ๋ชฉ๋ก, ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€ ๊ธฐ๋ก

     

    Map์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

    • ๋ฐ์ดํ„ฐ๋ฅผ Key-Value ์Œ์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•  ๋•Œ
    • ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ์ค‘์š”ํ•  ๋•Œ
    ์˜ˆ: ์‚ฌ์šฉ์ž ID → ์‚ฌ์šฉ์ž ์ •๋ณด, ์ƒํ’ˆ๋ช… → ๊ฐ€๊ฒฉ

    ๐Ÿ™Œ  ๋งˆ๋ฌด๋ฆฌ 

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Java์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค์ธ List, Set, Map์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

     

    ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

    ์ด๋Ÿฐ ์ปฌ๋ ‰์…˜๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋‚˜ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜์ฃ .

     

    ํ•ต์‹ฌ์ธ List, Set, Map์€ ๊ฐ๊ฐ์˜ ์šฉ๋„์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

    • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด → List
    • ์ค‘๋ณต ์—†์ด ๊ณ ์œ ํ•œ ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด → Set
    • ํ•˜๋‚˜์˜ ํ‚ค๋กœ ๊ฐ’์„ ์—ฐ๊ฒฐํ•ด ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด → Map

     

    ๋‹ค์Œ ๊ธ€์—์„œ๋Š” List์™€ Set์˜ ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด์ธ ArrayList, LinkedList, HashSet, TreeSet์˜ ํŠน์ง•๊ณผ ์ฐจ์ด๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š” ๐Ÿ˜Š

    ๋ฐ˜์‘ํ˜•