item 7 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

์•„์ดํ…œ7 ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ

  • GC๋ฅผ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋” ์ด์ƒ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ์˜คํ•ดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ ˆ๋Œ€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์œ„์น˜๋Š” ์–ด๋””์ธ๊ฐ€?

public class Stack {
    private Object[] elements;
    private int size = 0;
    private static final int DEFAULT_INITIAL_CAPACITY = 16;
    public Stack() {
        elements = new Object[DEFAULT_INITIAL_CAPACITY];
    }
    public void push(Object e) {
        ensureCapacity();
        elements[size++] = e;
    }
    public Object pop() {
        if (size == 0)
            throw new EmptyStackException();
        return elements[--size];
    }
    /**
     * ์›์†Œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ ํ™•๋ณดํ•œ๋‹ค.
     * ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ๋Œ€๋žต ๋‘ ๋ฐฐ์”ฉ ๋Š˜๋ฆฐ๋‹ค.
     */
    private void ensureCapacity() {
        if (elements.length == size)
            elements = Arrays.copyOf(elements, 2 * size + 1);
    }
}
  • ์œ„ ์ฝ”๋“œ๋Š” ์Šคํƒ์ด ์ปค์กŒ๋‹ค๊ฐ€ ์ค„์–ด๋“ค์—ˆ์„ ๋•Œ ์Šคํƒ์—์„œ ๊บผ๋‚ด์ง„ ๊ฐ์ฒด๋“ค์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํšŒ์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ทธ ๊ฐ์ฒด๋“ค์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ง์ด๋‹ค. ์ด ์Šคํƒ์ด ๊ทธ ๊ฐ์ฒด๋“ค์˜ ๋‹ค ์“ด ์ฐธ์กฐ(obsolete reference)๋ฅผ ์—ฌ์ „ํžˆ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • GC๋Š” ๋Œ€์ƒ ๊ฐ์ฒด์— ํ•˜๋‚˜๋ผ๋„ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ ๊ฐ์ฒด ๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํšŒ์ˆ˜ํ•ด๊ฐ€์ง€ ๋ชปํ•œ๋‹ค.
  • ๊ฐ„๋‹จํ•œ ํ•ด๋ฒ•์€ ํ•ด๋‹น ์ฐธ์กฐ๋ฅผ ๋‹ค ์ผ์„ ๋•Œ null ์ฒ˜๋ฆฌ(์ฐธ์กฐํ•ด์ œ)ํ•˜๋ฉด ๋œ๋‹ค.

null ์ฒ˜๋ฆฌ๊ฐ€ ์ตœ์„ ์ธ๊ฐ€?

  • null ์ฒ˜๋ฆฌ๋ฅผ ๊ผผ๊ผผํžˆ ํ•˜๋Š” ๊ฒƒ๋„ ์ด์ ์ด ์žˆ๊ธด ํ•˜๋‹ค.(์ž˜๋ชป๋œ ์ฐธ์กฐ NPE๋กœ ์กฐ๊ธฐ ๋ฐœ๊ฒฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค) ์€ ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋‹ค ์“ฐ์ง€๋งˆ์ž ์ผ์ผ์ด null ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ฉ ๋ฐ”๋žŒ์งํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ํ•„์š”๋„ ์—†๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ํ•„์š” ์ด์ƒ์œผ๋กœ ์ง€์ €๋ถ„ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ null ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ์€ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ์—ฌ์•ผ ํ•œ๋‹ค.
  • ๋‹ค ์“ด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ทธ ์ฐธ์กฐ๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜๋ฅผ ์œ ํšจ ๋ฒ”์œ„(socpe) ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ต์‹ฌ์ •๋ฆฌ

  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ๊ฒ‰์œผ๋กœ ์ž˜ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•„ ์‹œ์Šคํ…œ์— ์ˆ˜๋…„๊ฐ„ ์ž ๋ณตํ•˜๋Š” ์‚ฌ๋ก€๋„ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ˆ„์ˆ˜๋Š” ์ฒ ์ €ํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋‚˜ ํž™ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๊ฐ™์€ ๋””๋ฒ„๊น… ๋„๊ตฌ๋ฅผ ๋™์›ํ•ด์•ผ๋งŒ ๋ฐœ๊ฒฌ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋Š” ์˜ˆ๋ฐฉ๋ฒ•์„ ์ตํ˜€๋‘๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.