Item 27. Unchecked Warning

๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜๋ผ.

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ClassCastException์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ฒŒ๋˜๋ฉด ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

@SuppressWarnings

๊ฒฝ๊ณ ๋ฅผ ์ตœ๋Œ€ํ•œ ์ œ๊ฑฐํ•˜๋”๋ผ๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋งŒ์•ฝ ํƒ€์ž… ์•ˆ์ „์ด ํ™•์‹ ํ•˜๋‹ค๋ฉด ์ด ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ฒจ์ค„ ์ˆ˜ ์žˆ๋Š” @SuppressWarnings ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    // ...

    @SuppressWarnings("unchecked")
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

    // ...
}

์œ„ ์ฝ”๋“œ๋Š” ์‹ค์ œ Java 17์˜ ArrayList ์ฝ”๋“œ๋กœ, ์ฃผ์„ ๋ถ€๋ถ„์—์„œ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ @SuppressWarnings ์• ๋„ˆํ…Œ์ด์…˜์„ ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ฒจ์ฃผ๊ฒŒ ๋œ๋‹ค. ์• ๋„ˆํ…Œ์ด์…˜ ์„ ์–ธ์€ ๊ฐœ๋ณ„ ์ง€์—ญ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€ํ„ฐ ํด๋ž˜์Šค ์ „์ฒด๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ฐ€๋Šฅํ•œ ํ•œ ์ข์€ ๋ฒ”์œ„์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์œ„ ์ฝ”๋“œ์˜ ๋” ์ข์€ ๋ฒ”์œ„์— ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    // ...

    public <T> T[] toArray(T[] a) {
        if (a.length < size) {
            // ์„ ์–ธ๋ถ€์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ญ๋ณ€์ˆ˜ ์„ ์–ธ ํ›„ ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉ
            @SuppressWarnings("unchecked")
            T[] result = (T[]) Arrays.copyOf(elementData, size, a.getClass());
            return result;
        }
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

    // ...
}

๊ฒฐ๋ก 

๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋Š” ์ค‘์š”ํ•˜๋‹ˆ ๋ฌด์‹œํ•˜์ง€ ๋ง๊ณ , ๋งŒ์•ฝ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด @SuppressWarnings ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ฒจ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์•ˆ์ „ํ•œ ์ด์œ ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ฃผ์„์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Last updated

Was this helpful?