Language/JAVA

[JAVA] μ»¬λ ‰μ…˜ (Collection)

κ΅ λ―Ό 2024. 8. 29. 13:19

πŸ“Œμ»¬λ ‰μ…˜(Collection) : μ—¬λŸ¬ 개의 객체λ₯Ό ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬Άμ–΄μ„œ 관리할 수 μžˆλŠ” ꡬ쑰

 

- μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ (Collection Framework) :  λ°μ΄ν„°μ˜ 집합을 λ‹€λ£¨λŠ” 데 ν•„μš”ν•œ λ‹€μ–‘ν•œ μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀

  • ꡬ성 μš”μ†Œ
    • μΈν„°νŽ˜μ΄μŠ€ : μ»¬λ ‰μ…˜μ˜ 기본적인 λ™μž‘μ„ μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
      - List, Set, Queue, Map λ“±
    • κ΅¬ν˜„ 클래슀 : μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ꡬ체적인 클래슀
      - List의 경우 ArrayList, LinkedList λ“±
    • μ•Œκ³ λ¦¬μ¦˜ : μ»¬λ ‰μ…˜μ„ μ‰½κ²Œ μ‘°μž‘ν•  수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀
      - Collection ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” μ •λ ¬, 검색, 비ꡐ λ“±μ˜ μ•Œκ³ λ¦¬μ¦˜

 

 

μ œλ„€λ¦­ μ»¬λ ‰μ…˜ 

  • νƒ€μž… μ•ˆμ •μ„± 보μž₯
  • 컴파일 νƒ€μž„μ— νƒ€μž… 였λ₯˜ μž‘μ„ 수 있음
  • λΆˆν•„μš”ν•œ ν˜•λ³€ν™˜(Casting) λ°©

πŸ“„ Collectionκ³Ό Genericλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•œ μ½”λ“œ μ˜ˆμ‹œ

ArrayList<String> list = new ArrayList<>();
list.add("Hello");
// list.add(10); // 컴파일 였λ₯˜ λ°œμƒ: μ •μˆ˜ν˜•μ€ μΆ”κ°€ν•  수 μ—†μŒ

: String νƒ€μž…λ§Œμ„ ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ—, λ‹€λ₯Έ νƒ€μž…μ˜ 객체λ₯Ό μΆ”κ°€ν•˜λ € ν•˜λ©΄ 컴파일 νƒ€μž„μ— 였λ₯˜ λ°œμƒ.

 

 

μ£Όμš” μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ™€ μ œλ„€λ¦­ μ‚¬μš© μ˜ˆμ‹œ

  1. Set : λΉ„μˆœμ°¨μ  μ €μž₯(μˆœμ„œ μœ μ§€ x), 쀑볡 데이터 λΆˆν—ˆ

    πŸ“„ μ˜ˆμ‹œ μ½”λ“œ
    import java.util.HashSet;
    import java.util.Set;
    
    public class SetExample {
        public static void main(String[] args) {
            Set<String> fruits = new HashSet<>();
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Apple");  // μ€‘λ³΅λœ κ°’
    
            for (String fruit : fruits) {
                System.out.println(fruit);
            }
        }
    }
    πŸ“„ κ²°κ³Ό
    Apple
    Banana


  2. Map : λΉ„μˆœμ°¨μ  μ €μž₯, 쀑볡 데이터 ν—ˆμš©
    * ν‚€-κ°’(key-value) 쌍으둜 데이터λ₯Ό μ €μž₯ν•œλ‹€. ν‚€λŠ” 쀑볡될 수 μ—†μœΌλ©°, 각 ν‚€λŠ” ν•˜λ‚˜μ˜ κ°’λ§Œμ„ 가진닀.
    (값은 쀑볡될 수 μžˆλ‹€.)
    πŸ“„ μ˜ˆμ‹œ μ½”λ“œ
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapExample {
        public static void main(String[] args) {
            Map<String, Integer> fruitPrices = new HashMap<>();
            fruitPrices.put("Apple", 1000);
            fruitPrices.put("Banana", 1500);
            fruitPrices.put("Apple", 1200);  // λ™μΌν•œ 킀에 λ‹€λ₯Έ κ°’ μΆ”κ°€
    
            for (String key : fruitPrices.keySet()) {
                System.out.println(key + ": " + fruitPrices.get(key));
            }
        }
    }

    πŸ“„ κ²°κ³Ό
    Apple: 1200
    Banana: 1500
  3. List : 순차적 μ €μž₯, 쀑볡 데이터 ν—ˆμš©
    πŸ“„ μ˜ˆμ‹œ μ½”λ“œ
    import java.util.ArrayList;
    import java.util.List;
    
    public class GenericExample {
        public static void main(String[] args) {
            List<String> fruits = new ArrayList<>(); 
    		//Generic을 ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄λ§Œ 담을 수 μžˆλŠ”String νƒ€μž…μ˜ 객체만 μ €μž₯ν•˜λ„λ‘ μ œν•œν•œλ‹€.
            fruits.add("Apple");
            fruits.add("Banana");
            // fruits.add(123);  // 컴파일 였λ₯˜: 잘λͺ»λœ νƒ€μž…μ˜ 데이터λ₯Ό μΆ”κ°€ν•˜λ €κ³  μ‹œλ„ν•¨
    
            for (String fruit : fruits) {
                System.out.println(fruit);
            }
        }
    }

    πŸ“„ κ²°κ³Ό
    Apple
    Banana

 

μ œλ„€λ¦­μ˜ ν•„μš”μ„±

πŸ“„ μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ§€ μ•Šμ€ μ»¬λ ‰μ…˜ μ˜ˆμ‹œμ½”λ“œ

import java.util.ArrayList;
import java.util.List;

public class NonGenericExample {
    public static void main(String[] args) {
        List fruits = new ArrayList();  // μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
        fruits.add("Apple");
        fruits.add(123);  // λ‹€μ–‘ν•œ νƒ€μž…μ˜ 데이터 μΆ”κ°€ κ°€λŠ₯

        for (Object fruit : fruits) {
            String str = (String) fruit;  // νƒ€μž… μΊμŠ€νŒ… ν•„μš”
            System.out.println(str);
        }
    }
}

 

: ν•΄λ‹Ή μ½”λ“œ μ‹€ν–‰ μ‹œ fruit λ¦¬μŠ€νŠΈμ— λ‹€μ–‘ν•œ νƒ€μž…μ˜ 객체가 담겨 ClassCastException 였λ₯˜ λ°œμƒ

→ μ œλ„€λ¦­ μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 였λ₯˜ 방지할 수 있음.