[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item28 ์™„๋ฒฝ๊ณต๋žต. @SafeVarags

2023. 3. 17. 11:29ใ†JAVA/Effective JAVA

728x90

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item28. ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item28. ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. (tistory.com)

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item28. ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item28. ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. ๋ฐฐ์—ด๊ณผ ์ œ๋„ค๋ฆญ ํƒ€์ž…์—๋Š” ์ค‘์š”ํ•œ ๋‘๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. 1๏ธโƒฃ ๋ฐฐ์—ด์€ ๊ณต๋ณ€์ด๊ณ , ์ œ๋„ค๋ฆญ์€ ๋ถˆ๊ณต๋ณ€์ด๋‹ค. ๊ณต๋ณ€, ๋ถˆ๊ณต๋ณ€ ๋ง์ด ์–ด๋ ค์šด๋ฐ ์šฐ์„ 

hyejin.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 ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค๊ณ  ํ•ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 

๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋งŒ ์ˆจ๊ฒจ์ค„ ๋ฟ .. 

๋”ฐ๋ผ์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ณณ์—๋Š” ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค!!! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90