2023. 3. 17. 11:29ใJAVA/Effective JAVA
[์ดํํฐ๋ธ ์๋ฐ] Item28. ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ.
[์ดํํฐ๋ธ ์๋ฐ] Item28. ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ. (tistory.com)
p.166 ์ ๋ค๋ฆญ ํ์ ๊ณผ ๊ฐ๋ณ์ธ์ ๋ฉ์๋(varargs method)๋ฅผ ํจ๊ป ์ฐ๋ฉด ํด์ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฐ๊ฒ ๋๋ค.
๊ฐ๋ณ์ธ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๊ฐ๋ณ์ธ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ด์ ๋ฐฐ์ด์ด ํ๋ ๋ง๋ค์ด์ง๋๋ฐ, ์ด๋ ๊ทธ ๋ฐฐ์ด์ ์์๊ฐ ์ค์ฒดํ ๋ถ๊ฐ ํ์ ์ด๋ผ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ @SafeVarags ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋์ฒํ ์ ์๋ค.
@SafeVarags
: ์์ฑ์์ ๋ฉ์๋์ ์ ๋ค๋ฆญ ๊ฐ๋ณ์ธ์์ ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์
static <T> void safe(T... values)
{
for (T value : values)
{
System.out.println("value = " + value);
}
}
์ ๋ค๋ฆญ ๊ฐ๋ณ์ธ์๋ ๊ทผ๋ณธ์ ์ผ๋ก ํ์ ์์ ํ์ง ์๊ณ , ๊ฐ๋ณ ์ธ์์ ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ค์ผ๋ ๊ฐ๋ฅ์ฑ์ด ์์ด์ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทผ๋ฐ ์ด ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋จ์ํ ์ถ๋ ฅ๋ง ํ๊ณ ์๋ฌด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จ๋๋ฉด @SafeVarags ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธธ ์ ์๋ค.
static void notSafe(List<String>... stringLists)
{
Object[] array = stringLists; // List<String>... => List[], ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๊ณต๋ณ์ด๋๊น.
List<Integer> tmpList = List.of(42);
array[0] = tmpList;
String s = stringLists[0].get(0); // ClassCastException RuntimeException ๋ฐ์
}
notSafe() ๋ฉ์๋๋ฅผ ๋ณด๋ฉด List<String>...์ ๋ฐฐ์ด์ด๋ฏ๋ก List<String>[]๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
๋ฐ๋ผ์ stringLists[0].get(0)์ ํ ๋ ํ๋ณํ exception์ด ๋ฐ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ notSafe() ๋ฉ์๋์๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋จ๋๋ฐ ์ฌ๊ธฐ์ @SafeVarargs ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค๊ณ ํด์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ์ด ์๋๋ค.
๊ฒฝ๊ณ ๋ฉ์์ง๋ง ์จ๊ฒจ์ค ๋ฟ ..
๋ฐ๋ผ์ ์์ ํ์ง ์์ ๊ณณ์๋ ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ์๋๋ค!!!