2023. 3. 16. 10:23ใJAVA/Effective JAVA
[์ดํํฐ๋ธ ์๋ฐ] Item27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ.
์ ๋ค๋ฆญ์ ์ด์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ๋ง์ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๊ฒ ๋๋ค.
๋น๊ฒ์ฌ ํ๋ณํ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋ฉ์๋ ํธ์ถ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋งค๊ฐ๋ณ์ํ ๊ฐ๋ณ์ธ์ ํ์ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋ณํ ๊ฒฝ๊ณ ๋ฑ์ด ์๋ค.
๋๋ถ๋ถ์ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์์ด ์๋ชป๋์๋์ง ์ค๋ช ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ์ ๊ฑฐํ ์ ์๋ค.
์์์๋ ๋ก ํ์ ์ ์ฌ์ฉํ๋ค๊ณ ๊ฒฝ๊ณ ํ๋ ๊ฒ์ด๋ค.
ํ ์ ์๋ ํ ๋ชจ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ์!
๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋, ์ปดํ์ผ ์์ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฐ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ๋์ ์๋ชป๋ ๊ฒ๋ค์ ๋ํด ๊ฒฝ๊ณ ํ๋ ์ต์ ์ ์๋ฏธํ๋ค.
๋ชจ๋ ์ ๊ฑฐํ๋ค๋ฉด ๊ทธ ์ฝ๋๋ ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค. ์ฆ, ๋ฐํ์์ ClassCastException์ด ๋ฐ์ํ ์ผ์ด ์๋ค.
๊ทธ๋ฐ๋ฐ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ ์๋ ์์ง๋ง ํ์ ์์ ํ๋ค๊ณ ํ์ ํ ์ ์๋ค๋ฉด @SuppressWarnings("unchecked") ์ ๋ํ ์ด์ ์ ๋ฌ์์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ๋๋ค.
public class ListExample
{
private int size;
Object[] elements;
public <T> T[] toArray(T[] a)
{
if (a.length < size) {
/**
* ์ด๋
ธํ
์ด์
์ด ์์ ํ ์ด์ ๋ ์ฃผ์์ผ๋ก ์จ์ฃผ๋ฉด ์ข๋ค.
*/
@SuppressWarnings("unchecked") // ๊ฐ๋ฅํํ ์ข์ ๋ฒ์๋ก ์ด๋
ธํ
์ด์
๋ถ์ด๊ธฐ
T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass());
return result;
}
System.arraycopy(elements, 0, a, 0, size);
if (a.length > size) {
a[size] = null;
}
return a;
}
public static void main(String[] args)
{
}
}
toArray ๋ฉ์๋๋ ArrayList ์์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ ๋ฉ์๋์ธ๋ฐ ์ฌ๊ธฐ์๋ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ ์ ์์ง๋ง ํ์ ์ด ์์ ํ๋ค๊ณ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ @SuppressWarnings ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ค.
โ ๊ทผ๋ฐ ์ด๋ ํ์ ์์ ํจ์ ๊ฒ์ฆํ์ง ์์ ์ฑ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ์ค์ค๋ก์๊ฒ ์๋ชป๋ ๋ณด์ ์ธ์์ ์ฃผ๋ ๊ผด์ด๋ค.
์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ๊ทธ ์ฝ๋๋ ๊ฒฝ๊ณ ์์ด ์ปดํ์ผ ๋๊ฒ ์ง๋ง, ๋ฐํ์์๋ ClassCastException์ ๋์ง ์ ์๋ค.
โ ํํธ์ผ๋ก๋ ์์ ํ๋ค๊ณ ๊ฒ์ฆ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๊ทธ๋๋ก ๋๋ฉด, ์ง์ง ๋ฌธ์ ๋ฅผ ์๋ฆฌ๋ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ๋์๋ ๋์น์ฑ์ง ๋ชปํ ์ ์๋ค. ์ ๊ฑฐํ์ง ์์ ์๋ง์ ๊ฑฐ์ง ๊ฒฝ๊ณ ์์ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ๋ฌปํ๊ธฐ ๋๋ฌธ!
๐ฉ @SuppressWarnings ์ด๋ ธํ ์ด์ ์ ํญ์ ๊ฐ๋ฅํํ ์ข์ ๋ฒ์์ ์ ์ฉํด์ผ ํ๋ค.
๋ณ์ ์ ์ธ, ์์ฃผ ์งง์ ๋ฉ์๋, ์์ฑ์ ์ ๋๊ฐ ๋ ๊ฒ์ธ๋ฐ ์ด ์ด๋ ธํ ์ด์ ์ ํด๋์ค ์ ์ฒด์ ์ ์ฉํ๋ฉด ์์นซ ์ฌ๊ฐํ ๊ฒฝ๊ณ ๋ฅผ ๋์น ์ ์๊ธฐ ๋๋ฌธ์ ํด๋์ค ์ ์ฒด์ ์ ์ฉํ๋ฉด ์๋๋ค!!
๋ํ @SuppressWarnings("unchekced") ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ๋๋ฉด ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํด๋ ์์ ํ ์ด์ ์ ๋ํด์ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋๋ฉด ์ข๋ค.
๋ค๋ฅธ ์ฌ๋์ด ๊ทธ ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ๋์์ด ๋๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ๊ทธ ์ฝ๋๋ฅผ ์๋ชป ์์ ํ์ฌ ํ์ ์์ ์ฑ์ ์๋ ์ํฉ์ญ์ ์ค์ด๋ ๋ค.
๐ ์ ๋ฆฌ
๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ฌด์ํ๋ฉด ์๋๋ค.
๋ชจ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ์๋ ๋ฐํ์์ ClassCastException์ ์ผ์ผํฌ ์ ์๋ ์ ์ฌ์ ๊ฐ๋ฅ์ฑ์ ๋ปํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๋คํด์ ์ด ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ค.
๋ง์ฝ ์ ๊ฑฐํ์ง ๋ชปํ์ง๋ง ์์ ํ๋ค๋ฉด ๊ทธ ์ฝ๋๊ฐ ํ์ ์์ ํจ์ ์ฆ๋ช ํ๊ณ , ๊ฐ๋ฅํ ํ ๋ฒ์๋ฅผ ์ขํ์ @SuppressWarnings("unchecked") ์ ๋ ธํ ์ด์ ์ผ๋ก ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ด์ ์ ๋ํด์๋ ์ฃผ์์ผ๋ก ๋จ๊ฒจ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ์ดํดํ ์ ์๋๋ก ํ๋ฉด ๋๋ค!