ν‹°μŠ€ν† λ¦¬ λ·°

πŸ”Ž μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ ?

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

즉, 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료 ꡬ쑰와 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μ‘°ν™”ν•˜μ—¬ 클래슀둜 κ΅¬ν˜„ν•΄ 놓은 κ²ƒμž…λ‹ˆλ‹€.

 

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

 

πŸ“Œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ μ£Όμš” μΈν„°νŽ˜μ΄μŠ€

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료 ꡬ쑰에 따라 λ‹€μŒκ³Ό 같은 핡심이 λ˜λŠ” μ£Όμš” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

1. List μΈν„°νŽ˜μ΄μŠ€

2. Set μΈν„°νŽ˜μ΄μŠ€

3. Map μΈν„°νŽ˜μ΄μŠ€

 

μ΄μ€‘μ—μ„œ List와 Set μΈν„°νŽ˜μ΄μŠ€λŠ” λͺ¨λ‘ Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μ§€λ§Œ, κ΅¬μ‘°μƒμ˜ 차이둜 인해 Map μΈν„°νŽ˜μ΄μŠ€λŠ” λ³„λ„λ‘œ μ •μ˜λ©λ‹ˆλ‹€.

λ”°λΌμ„œ List μΈν„°νŽ˜μ΄μŠ€μ™€ Set μΈν„°νŽ˜μ΄μŠ€μ˜ κ³΅ν†΅λœ 뢀뢄을 Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

→ πŸ’‘ List μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ™€ Set μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 μ •μ˜λ©λ‹ˆλ‹€.

 

μžλ°”μ—μ„œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μ„±ν•˜κ³  μžˆλŠ” μ£Όμš” μΈν„°νŽ˜μ΄μŠ€μ˜ κ°„λž΅ν•œ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€ μ„€λͺ… κ΅¬ν˜„ 클래슀
List<E> μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ, λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•¨. Vector, ArrayList, LinkedList, Stack, Queue
Set<E> μˆœμ„œκ°€ μ—†λŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ, λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ HashSet, TreeSet
Map<K, V> 킀와 κ°’μ˜ ν•œ 쌍으둜 μ΄λ£¨μ–΄μ§€λŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ, μˆœμ„œκ°€ μ—†μŒ.
μ΄λ•Œ ν‚€λŠ” 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ, 값은 쀑볡될 수 있음
HashMap, TreeMap, Hashtable, properties

 

πŸ“Œ μ£Όμš” μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속 관계

μžλ°”μ—μ„œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μ„±ν•˜κ³  μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속 κ΄€κ³„λŠ” λ‹€μŒ κ·Έλ¦Όκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μœ„μ˜ κ·Έλ¦Όμ—μ„œ <E>λ‚˜ <K, V>λΌλŠ” 것은 μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€κ°€ μ œλ„€λ¦­μœΌλ‘œ ν‘œν˜„λ˜μ–΄ μžˆμŒμ„ μ•Œλ €μ€λ‹ˆλ‹€.

 

 

πŸ“Œ μ»¬λ ‰μ…˜ 클래슀(collection class)

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ— μ†ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀λ₯Ό μ»¬λ ‰μ…˜ 클래슀(collection class)라고 ν•©λ‹ˆλ‹€.

 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ λͺ¨λ“  μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” List와 Set, Map μΈν„°νŽ˜μ΄μŠ€ 쀑 ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, 클래슀 이름에도 κ΅¬ν˜„ν•œ μΈν„°νŽ˜μ΄μŠ€μ˜ 이름이 ν¬ν•¨λ˜λ―€λ‘œ λ°”λ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Vectorλ‚˜ Hashtableκ³Ό 같은 μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” μ˜ˆμ „λΆ€ν„° μ‚¬μš©ν•΄ μ™”μœΌλ―€λ‘œ, κΈ°μ‘΄ μ½”λ“œμ™€μ˜ ν˜Έν™˜μ„ μœ„ν•΄ 아직도 남아 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 기쑴에 μ‚¬μš©ν•˜λ˜ μ»¬λ ‰μ…˜ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒλ³΄λ‹€λŠ” μƒˆλ‘œ μΆ”κ°€λœ ArrayListλ‚˜ HashMap 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ„±λŠ₯ λ©΄μ—μ„œλ„ 더 λ‚˜μ€ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

❓ ArrayList

ArrayListλŠ” 인덱슀둜 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

μ»¬λ ‰μ…˜ 클레슀 쀑 μ‹€λ¬΄μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

λ°°μ—΄μ˜ νŠΉμ§•μΈ 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κ²Œ λ˜λŠ”λ°

λ°°μ—΄κ³Ό κ°€μž₯ 큰 차이점은 길이λ₯Ό μ œν•œν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€.

 

→ 배열은 길이에 μ œν•œμ„ 두어야 ν•  λ•Œ 자주 μ‚¬μš©

ArrayListλŠ” λͺ‡ 개의 데이터가 λ“€μ–΄μ˜¬μ§€ μ•Œ 수 없을 λ•Œ μ‚¬μš©

 

λ‹€μŒ μ½”λ“œλŠ” ArrayList 클래슀λ₯Ό μ΄μš©ν•˜μ—¬ 리슀트λ₯Ό μƒμ„±ν•˜κ³  μ‘°μž‘ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

import java.util.*;

public class Collection01 {
    public static void main(String[] args) {
        // 리슀트 생성
        ArrayList<String> arrList = new ArrayList<String>();
        
        // λ¦¬μŠ€νŠΈμ— μš”μ†Œμ˜ μ €μž₯
        arrList.add("λ„·");
        arrList.add("λ‘˜");
        arrList.add("μ…‹");
        arrList.add("ν•˜λ‚˜");
        
        // 리슀트 μš”μ†Œμ˜ 좜λ ₯
        for(int i=0; i<arrList.size(); i++) {
            System.out.println(arrList.get(i));
        }
    } 
}

μœ„μ—μ„œ ArrayListλŠ” μ»¬λ ‰μ…˜ 클래슀라고 ν–ˆκΈ° λ•Œλ¬Έμ— μš°λ¦¬κ°€ 클래슀의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λ“―μ΄ μ„ μ–Έν•΄μ„œ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

μœ„ μ½”λ“œμ—μ„œλŠ” addλΌλŠ” λ©”μ†Œλ“œλ₯Ό 톡해 μš”μ†Œλ₯Ό λ„£μ–΄μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€μ μœΌλ‘œ λ°°μ—΄μ—μ„œλŠ” λ°°μ—΄μ˜ 길이λ₯Ό length λ©”μ†Œλ“œλ₯Ό 톡해 μ•Œ 수 μžˆμ—ˆμ§€λ§Œ,

ArrayListμ—μ„œλŠ” size λ©”μ†Œλ“œλ₯Ό 톡해 길이λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ Collection μΈν„°νŽ˜μ΄μŠ€

List와 Set μΈν„°νŽ˜μ΄μŠ€μ˜ λ§Žμ€ κ³΅ν†΅λœ 뢀뢄을 Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•˜κ³ , 두 μΈν„°νŽ˜μ΄μŠ€λŠ” 그것을 μƒμ†λ°›μŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ Collection μΈν„°νŽ˜μ΄μŠ€λŠ” μ»¬λ ‰μ…˜μ„ λ‹€λ£¨λŠ”λ° κ°€μž₯ 기본적인 λ™μž‘λ“€μ„ μ •μ˜ν•˜κ³ , 그것을 λ©”μ†Œλ“œλ‘œ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

ArrayList 클래슀둜 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  λ°”λ‘œ addλ‚˜ get κ³Ό 같은 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μ΄μœ λŠ”

ArrayListλŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 List μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 κ΅¬ν˜„μ„ ν•΄λ†“μ•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” μ£Όμš” λ©”μ†Œλ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ©”μ†Œλ“œ μ„€λͺ…
boolean add(E e) ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ „λ‹¬λœ μš”μ†Œλ₯Ό 좔가함.(선택적 κ°€λŠ₯)
void clear() ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•¨.(선택적 κ°€λŠ₯)
boolean contains(Object o) ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μ „λ‹¬λœ 객체λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인함.
boolean equals(Object o) ν•΄λ‹Ή μ»¬λ ‰μ…˜κ³Ό μ „λ‹¬λœ 객체가 같은지λ₯Ό 확인함.
boolean isEmpty() ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ λΉ„μ–΄μžˆλŠ”μ§€λ₯Ό 확인함.
Iterator<E> iterator() ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 반볡자(iterator)λ₯Ό λ°˜ν™˜ν•¨.
boolean remove(Object e) ν•΄λ‹Ή μ»¬λ ‰μ…˜μ—μ„œ μ „λ‹¬λœ 객체λ₯Ό μ œκ±°ν•¨. (선택적 κΈ°λŠ₯)
int size() ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ˜ 총 개수λ₯Ό λ°˜ν™˜ν•¨.
Object[] toArray() ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό Object νƒ€μž…μ˜ λ°°μ—΄λ‘œ λ°˜ν™˜ν•¨.
728x90
LIST