Tech Stack/Java & Spring

[์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ] List

_silver 2025. 4. 5. 02:52
1. ๋ฆฌ์ŠคํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 โ˜‘๏ธŽ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•

  - ์ˆœ์„œ ๋ณด์žฅ: ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„ ์ˆœ์„œ๋ฅผ ์œ ์ง€

  - ์ค‘๋ณต ํ—ˆ์šฉ: ๊ฐ™์€ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ €์žฅ ๊ฐ€๋Šฅ

  - ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์กฐ์ ˆ๋จ


2. ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๋ฆฌ์ŠคํŠธ

 โ˜‘๏ธŽ ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ArrayList, LinkedList๋ฅผ ํ‰๋‚ด๋‚ด์–ด ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด์ž.

 

โœฐ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค : MyList

  - ์ด ์ธํ„ฐํŽ˜์ด์Šค ๋•๋ถ„์—, MyArrayList๋‚˜ MyLinkedList๋ฅผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋”๋ณด๊ธฐ
public interface MyList<E> {
    int size();
    void add(E e);
    void add(int index, E e);
    E get(int index);
    E set(int index, E element);
    E remove(int index);
    int indexOf(E o);
}

3. MyArrayList - ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ๋ฆฌ์ŠคํŠธ

   โ˜‘๏ธŽ ๋‚ด๋ถ€ ๋ฐฐ์—ด ์‚ฌ์šฉ

   โ˜‘๏ธŽ ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ์ดˆ๊ณผํ•˜๋ฉด grow() ๋ฉ”์„œ๋“œ๋กœ 2๋ฐฐ ํ™•์žฅ

   โ˜‘๏ธŽ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ ์‹œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ฒจ์•ผ ํ•ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ

๋”๋ณด๊ธฐ
@Override
public void add(int index, E e) {
    if (size == elementData.length) grow();
    shiftRightFrom(index);
    elementData[index] = e;
    size++;
}
๋”๋ณด๊ธฐ

 

์ž‘์—… ์‹œ๊ฐ„
์•ž์— ์ถ”๊ฐ€ O(n)
๋’ค์— ์ถ”๊ฐ€ O(1)
์กฐํšŒ O(1)

 


4. MyLinkedList - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜

   โ˜‘๏ธŽ ๋…ธ๋“œ(Node)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ

   โ˜‘๏ธŽ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ํ•œ ๋ฒˆ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€ -> ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค.

   โ˜‘๏ธŽ But, ์‚ฝ์ž…/์‚ญ์ œ๋Š” ๋น ๋ฅด๋‹ค (์ฐธ์กฐ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋จ!)

 

๋”๋ณด๊ธฐ
@Override
public void add(int index, E e) {
    Node<E> newNode = new Node<>(e);
    if (index == 0) {
        newNode.next = first;
        first = newNode;
    } else {
        Node<E> prev = getNode(index - 1);
        newNode.next = prev.next;
        prev.next = newNode;
    }
    size++;
}
๋”๋ณด๊ธฐ
์ž‘์—… ์‹œ๊ฐ„
์•ž์— ์ถ”๊ฐ€ O(1)
์ค‘๊ฐ„ ์ถ”๊ฐ€ O(n)
์กฐํšŒ O(n)

5. ๋‹คํ˜•์„ฑ & ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…

   โ˜‘๏ธŽ ๋ฆฌ์ŠคํŠธ ์ „๋žต์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด MyList ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

๋”๋ณด๊ธฐ
public class BatchProcessor {
    private final MyArrayList<Integer> list = new MyArrayList<>();
}
๋”๋ณด๊ธฐ
public class BatchProcessor {
    private final MyList<Integer> list;

    public BatchProcessor(MyList<Integer> list) {
        this.list = list;
    }

    public void logic(int size) {
        for (int i = 0; i < size; i++) {
            list.add(0, i);
        }
    }
}

โœ… MyArrayList, MyLinkedList ์ค‘ ์–ด๋–ค ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…์œผ๋กœ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค!


6. ์„ฑ๋Šฅ ๋น„๊ต : ์ง์ ‘ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ
๋”๋ณด๊ธฐ

 โ˜‘๏ธŽ ์•ž์— ์ถ”๊ฐ€

 - MyArrayList: O(n) → ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•œ ์นธ์”ฉ ๋ฐ€์–ด์•ผ ํ•จ

 - MyLinkedList: O(1) → ์ฐธ์กฐ๋งŒ ๋ฐ”๊พธ๋ฉด ๋จ

 

for (int i = 0; i < size; i++) {
    list.add(0, i);
}
๋”๋ณด๊ธฐ

 โ˜‘๏ธŽ ์ค‘๊ฐ„ ์ถ”๊ฐ€

 - ๋‘˜ ๋‹ค ํ‰๊ท ์ ์œผ๋กœ๋Š” O(n)

 - ํ•˜์ง€๋งŒ MyArrayList๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

 

๋”๋ณด๊ธฐ

 โ˜‘๏ธŽ ๋’ค์— ์ถ”๊ฐ€

- MyArrayList: O(1) (๋‹จ, ๊ฐ€๋” grow)

 - MyLinkedList: O(n) (๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ํƒ์ƒ‰ ํ•„์š”)


7. ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ List

 โ˜‘๏ธŽ ์ž๋ฐ”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ List ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 โ˜‘๏ธŽ ์‹ค๋ฌด์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ ArrayList๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค

 โ˜‘๏ธŽ ์•ž์ชฝ์—์„œ ์ž์ฃผ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” LinkedList๋„ ๊ณ ๋ คํ•ด๋ณผ๋งŒ ํ•œ๋‹ค.

๊ธฐ๋Šฅ ArrayList LinkedList
์•ž์— ์ถ”๊ฐ€ O(n) O(1)
๋’ค์— ์ถ”๊ฐ€ O(1) O(1)
์กฐํšŒ O(1) O(n)
๊ฒ€์ƒ‰ O(n) O(n)

 


8. ์ •๋ฆฌ

โ˜‘๏ธŽ List๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

โ˜‘๏ธŽ ArrayList๋Š” ๋ฐฐ์—ด ๊ธฐ๋ฐ˜, LinkedList๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜

โ˜‘๏ธŽ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ์„ค๊ณ„๋ฅผ ํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๋กœ ์‰ฝ๊ฒŒ ์ „๋žต์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

โ˜‘๏ธŽ ์‹ค์ œ ์„ฑ๋Šฅ์€ ๋‹จ์ˆœํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฟ ์•„๋‹ˆ๋ผ CPU ์บ์‹œ, ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋“ฑ๋„ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

โ˜‘๏ธŽ ์ž๋ฐ”์˜ ArrayList๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณ ์† ๋ณต์‚ฌ ๋“ฑ ์ตœ์ ํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด ์‹ค๋ฌด์—์„œ๋Š” ๋” ๋งŽ์ด ์“ฐ์ธ๋‹ค.

 

<์ฐธ๊ณ > - ๊น€์˜ํ•œ์˜ ์‹ค์ „ ์ž๋ฐ” ์ค‘๊ธ‰2ํŽธ ๊ฐ•์˜ ์„น์…˜ 6. ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ List