[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item02 ์™„๋ฒฝ๊ณต๋žต. ๊ฐ€๋ณ€ ์ธ์ˆ˜ varargs

2023. 1. 9. 10:43ใ†JAVA/Effective JAVA

728x90
item02. ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ. 

" p21. ๊ฐ€๋ณ€์ธ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. "

 

 

๊ฐ€๋ณ€ ์ธ์ˆ˜ varargs๋ž€? 

: ์—ฌ๋Ÿฌ ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ€์ ์ธ argument๋ฅผ ๋งํ•œ๋‹ค. 

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์˜ ๊ฐœ์ˆ˜์™€ ์ƒ๊ด€์—†์ด ๋™์ ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. 

 

๊ฐ€๋ณ€์ธ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ํ†ต์งธ๋กœ ๋ฐฐ์—ด๋กœ ๋ฐ›์•„๋“ค์—ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

๊ฐ€๋ณ€์ธ์ˆ˜๋Š” jdk 1.5 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ๋œ ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” System.out.printf() ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. 

 

๊ฐ€๋ณ€ ์ธ์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ์— ์˜ค์ง ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ€๋ณ€ ์ธ์ˆ˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. 

public void printNumers(int... numbers, String... names) ๋ญ ์ด๋Ÿฐ์‹์œผ๋กœ ์„ ์–ธ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

public class VarargsSamples
{
   // ๊ฐ€๋ณ€ ์ธ์ˆ˜๋Š” ์˜ค์ง ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. (์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰์— ์„ ์–ธํ•ด์•ผํ•จ)
   public void printNumbers(int... numbers)
   {
      System.out.println(numbers.getClass().getCanonicalName()); // numbers๊ฐ€ ์–ด๋–ค ํƒ€์ž…์ผ๊ฑด์ง€
      System.out.println(numbers.getClass().getComponentType()); // ๋ฐฐ์—ด์ด ์–ด๋–ค ํƒ€์ž…์„ ๊ฐ€์ง€๋Š”์ง€
      Arrays.stream(numbers).forEach(System.out::println); // ๊ฐ€๋ณ€ ์ธ์ˆ˜๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฐ’ ์ถœ๋ ฅ
   }
   
   public static void main(String[] args)
   {
      VarargsSamples varargsSamples = new VarargsSamples();
      varargsSamples.printNumbers(5, 10);
      
   }
}

์‹คํ–‰ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ getCanonicalName() ์ด๋ž€ numbers๊ฐ€ ์–ด๋–ค ํƒ€์ž…์ธ์ง€์— ๋Œ€ํ•ด์„œ ๋‚˜ํƒ€๋‚ด๊ณ , getComponentType()์€ ๋ฐฐ์—ด์•ˆ์— ํƒ€์ž…์ด ๋ญ”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90