item 27 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e ์•„์ดํ…œ 27๋ฅผ ์š”์•ฝํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค.

์ œ๋„ค๋ฆญ์— ์ต์ˆ™ํ•ด์งˆ์ˆ˜๋ก ๋งˆ์ฃผ์น˜๋Š” ๊ฒฝ๊ณ  ์ˆ˜๋Š” ์ค„๊ฒ ์ง€๋งŒ ์ƒˆ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ํ•œ๋ฒˆ์— ๊นจ๋—ํ•˜๊ฒŒ ์ปดํŒŒ์ผ ๋˜๋ฆฌ๋ผ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ๋ง์ž. ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ์ฒ˜๋Ÿผ ์ž˜๋ชป ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

Set<Lark> exaltation = new HashSet();

Venery.java:4: warning: [unchecked] unchecked conversion
    Set<Lark> exaltation = new HashSet();
                            ^

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ๋ ค์ค€ ๋Œ€๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

Set<Lark> exaltation = new HashSet<>();

๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ํƒ€์ž… ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด @SuppressWarnings("unchecked") ์—๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ธฐ์ž

์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฒ€์ฆ๋œ ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋ฅผ (์ˆจ๊ธฐ์ง€ ์•Š๊ณ )๊ทธ๋Œ€๋กœ ๋‘๋ฉด, ์ง„์งœ ๋ฌธ์ œ๋ฅผ ์•Œ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜์™€๋„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ @SuppressWarnings ์—๋„ˆํ…Œ์ด์…˜์€ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ํ•œ ์ข์€ ๋ฒ”์œ„์— ์ ์šฉํ•˜์ž. ์ž์นซ ์‹ฌ๊ฐํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ ˆ๋Œ€๋กœ ํด๋ž˜์Šค ์ „์ฒด์— ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

ํ•œ ์ค„์ด ๋„˜๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž์— ๋‹ฌ๋ฆฐ @SuppressWarnings ์—๋„ˆํ…Œ์ด์…˜์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ง€์—ญ ๋ณ€์ˆ˜ ์„ ์–ธ ์ชฝ์œผ๋กœ ์˜ฎ๊ธฐ์ž.

public <T> T[] toArray(T[] a) {
    if(a.length < size) {
    // ์ƒ์„ฑํ•œ ๋ฐฐ์—ด๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๋ฐฐ์—ด์˜ ํƒ€์ž…์ด ๋ชจ๋‘ T[]๋กœ ๊ฐ™์œผ๋ฏ€๋กœ
    // ์˜ฌ๋ฐ”๋ฅธ ํ˜•๋ณ€ํ™˜์ด๋‹ค.
    @SuppressWarnings("unchecked") T[] result =
        (T[]) Arrays.copyOf(elements, size, a.getClass());
        return result;
    }
    ...
}

@SuppressWarnings("unchecked") ์—๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ๋ฉด ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•ด๋„ ์•ˆ์ „ํ•œ ์ด์œ ๋ฅผ ํ•ญ์ƒ ์ฃผ์„์œผ๋กœ ๋‚จ๊ฒจ์•ผ ํ•œ๋‹ค.

SuppressWarnings ์ข…๋ฅ˜

Attribute Description
all ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
cast ์บ์ŠคํŠธ ์—ฐ์‚ฐ์ž ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
dep-ann ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ์ฃผ์„ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
deprecation ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋ฉ”์†Œ๋“œ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
fallthroush switch๋ฌธ์—์„œ์˜ break ๋ˆ„๋ฝ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
finally ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” finally ๋ธ”๋Ÿญ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
null null ๋ถ„์„ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
rawtypes ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ถˆํŠน์ •์ผ ๋•Œ์˜ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
unchecked ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ž ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ
unused ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œ ์•ˆํ•จ

์ •๋ฆฌ

๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋Š” ์ค‘์š”ํ•˜๋‹ˆ ๋ฌด์‹œํ•˜์ง€ ๋ง์ž. ๋ชจ๋“  ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋Š” ๋Ÿฐํƒ€์ž„์— ClassCastException์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์  ๊ฐ€๋Šฅ์„ฑ์„ ๋œปํ•˜๋‹ˆ ์ตœ์„ ์„ ๋‹คํ•ด ์ œ๊ฑฐํ•˜๋ผ. ๊ฒฝ๊ณ ๋ฅผ ์—†์•จ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•˜๊ฒ ๋‹ค๋ฉด, ๊ทธ ์ฝ”๋“œ๊ฐ€ ํƒ€์ž… ์•ˆ์ „ํ•จ์„ ์ฆ๋ช…ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋ฒ”์œ„๋ฅผ ์ขํ˜€ @SuppressWarnings("unchecked") ์—๋„ˆํ…Œ์ด์…˜์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ฒจ๋ผ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊ธฐ๊ธฐ๋กœ ํ•œ ๊ทผ๊ฑฐ๋ฅผ ์ฃผ์„์œผ๋กœ ๋‚จ๊ฒจ๋ผ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ