CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ œ๋„ค๋ฆญ์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ varargs ์‚ฌ์šฉ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ œ๋„ค๋ฆญ์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ varargs ์‚ฌ์šฉ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์•ˆ๋…•! ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ๋Š” ๊ณ„์†ํ•ด์„œ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๊ต๋กญ๊ฒŒ๋„ ์ด๊ฒƒ์€ ํฐ ์ฃผ์ œ์ด์ง€๋งŒ ํ”ผํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์–ธ์–ด์˜ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค . ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์œ ํ˜• . ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์œ ํ˜•์€ ๋Ÿฐํƒ€์ž„์— ์ •๋ณด๋ฅผ ์™„์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•์ž…๋‹ˆ๋‹ค. Java์—์„œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์—๋Š” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ, ์›์‹œ ์œ ํ˜• ๋ฐ ๋น„์ œ๋„ค๋ฆญ ์œ ํ˜•์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ ์œ ํ˜•์€ ์ •๋ณด๊ฐ€ ์ง€์›Œ์ง€๊ณ  ๋Ÿฐํƒ€์ž„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๊ณต๊ต๋กญ๊ฒŒ๋„ ์ด๋“ค์€ ์ œ๋„ค๋ฆญ โ€” List<String>, List<Integer>๋“ฑ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ varargs๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ?

์žŠ์–ด๋ฒ„๋ ธ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด ์ด๊ฒƒ์€ ๊ฐ€๋ณ€ ๊ธธ์ด ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ณ„์‚ฐ๊ธฐ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค sum. ๋ฉ”์„œ๋“œ sum()๋Š” 2๊ฐœ, 3๊ฐœ, 5๊ฐœ ๋˜๋Š” ์›ํ•˜๋Š” ๋งŒํผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. sum()๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ธ์ˆ˜ ์ˆ˜์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋Œ€์‹  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public class SimpleCalculator {

   public static int sum(int...numbers) {

       int result = 0;

       for(int i : numbers) {

           result += i;
       }

       return result;
   }

   public static void main(String[] args) {

       System.out.println(sum(1,2,3,4,5));
       System.out.println(sum(2,9));
   }
}
์ฝ˜์†” ์ถœ๋ ฅ:

15
11
์ด๋Š” ์ œ๋„ค๋ฆญ๊ณผ ํ•จ๊ป˜ varargs๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

import javafx.util.Pair;
import java.util.ArrayList;
import java.util.List;

public class Main {

   public static <E> void addAll(List<E> list, E... array) {

       for (E element : array) {
           list.add(element);
       }
   }

   public static void main(String[] args) {
       addAll(new ArrayList<String>(), // This is okay
               "Leonardo da Vinci",
               "Vasco de Gama"
       );

       // but here we get a warning
       addAll(new ArrayList<Pair<String, String>>(),
               new Pair<String, String>("Leonardo", "da Vinci"),
               new Pair<String, String>("Vasco", "de Gama")
       );
   }
}
์ด ๋ฉ”์„œ๋“œ๋Š” a ์™€ ์ž„์˜ ๊ฐœ์ˆ˜์˜ ๊ฐ์ฒด๋ฅผ addAll()์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค . ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋‘ ๊ฐœ์˜ ์ผ๋ฐ˜ ๋ฌธ์ž์—ด์„ . ์—ฌ๊ธฐ์— ๋ชจ๋“  ๊ฒƒ์ด ์ •๋ˆ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ์— ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. List<E>Emain()addAll()ListPair<String, String>List

Unchecked generics array creation for varargs parameter
๊ทธ๊ฒŒ ๋ฌด์Šจ ๋œป์ด์•ผ? ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ array? array๊ฒฐ๊ตญ, ์šฐ๋ฆฌ ์ฝ”๋“œ์—๋Š” ! ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ€๋ณ€ ๊ธธ์ด ์ธ์ˆ˜(varargs)๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ addAll()๋ฐฉ๋ฒ•์˜ ์„œ๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public static <E> void addAll(List<E> list, E... array)
์‹ค์ œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public static <E> void addAll(List<E> list, E[] array)
์ฆ‰, main()๋ฉ”์„œ๋“œ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

public static void main(String[] args) { 
   addAll(new ArrayList<String>(), 
      new String[] { 
        "Leonardo da Vinci", 
        "Vasco de Gama" 
      } 
   ); 
   addAll(new ArrayList<Pair<String,String>>(),
        new Pair<String,String>[] { 
            new Pair<String,String>("Leonardo","da Vinci"), 
            new Pair<String,String>("Vasco","de Gama") 
        } 
   ); 
}
๋ฐฐ์—ด String์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Pair<String, String>๋ฐฐ์—ด์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ทธ๊ฒƒ์ด Pair<String, String>์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ์œ ํ˜•์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ ํ˜•์‹ ์ธ์ˆ˜(<String, String>)์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋Š” ์œ ํ˜•์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Java์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . Pair<String, String> ๋ฐฐ์—ด์„ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public static void main(String[] args) {

   // Compilation error Generic array creation
  Pair<String, String>[] array = new Pair<String, String>[10];
}
๊ทธ ์ด์œ ๋Š” ๋ช…๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ์•ˆ์ „์„ฑ์ž…๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•˜์‹œ๊ฒ ์ง€๋งŒ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ๋•Œ ๋ฐฐ์—ด์ด ์ €์žฅํ•  ๊ฐ์ฒด(๋˜๋Š” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ)๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

int array[] = new int[10];
์ด์ „ ์ˆ˜์—… ์ค‘ ํ•˜๋‚˜์—์„œ ์œ ํ˜• ์‚ญ์ œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. Pair์ด ๊ฒฝ์šฐ ์œ ํ˜• ์‚ญ์ œ๋กœ ์ธํ•ด ๊ฐœ์ฒด๊ฐ€ ์Œ์„ ์ €์žฅ ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค <String, String>. ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. varargs ๋ฐ ์ œ๋„ค๋ฆญ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์œ ํ˜• ์‚ญ์ œ ๋ฐ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ™•์‹ ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ varargs ๊ด€๋ จ ๊ฒฝ๊ณ ๋ฅผ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . @SafeVarargs

@SafeVarargs
public static <E> void addAll(List<E> list, E... array) {

   for (E element : array) {
       list.add(element);
   }
}
์ด ์ฃผ์„์„ ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์ „์— ๋ฐœ์ƒํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ๊ณผ ํ•จ๊ป˜ varargs๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ํž™ ์˜ค์—ผ์ž…๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ varargs ์‚ฌ์šฉ - 3ํž™ ์˜ค์—ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import java.util.ArrayList;
import java.util.List;

public class Main {

   static List<String> polluteHeap() {
       List numbers = new ArrayList<Number>();
       numbers.add(1);
       List<String> strings = numbers;
       strings.add("");
       return strings;
   }

   public static void main(String[] args) {

       List<String> stringsWithHeapPollution = polluteHeap();

       System.out.println(stringsWithHeapPollution.get(0));
   }
}
์ฝ˜์†” ์ถœ๋ ฅ:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ํž™ ์˜ค์—ผ์€ ์œ ํ˜•์˜ ๊ฐœ์ฒด๊ฐ€ Aํž™์— ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ B์œ ํ˜• ์•ˆ์ „๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์œ ํ˜•์˜ ๊ฐœ์ฒด๊ฐ€ ํž™์— ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์˜ˆ์—์„œ ์ด๊ฒƒ์€ ์ •ํ™•ํžˆ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์›์‹œ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ ํ•˜๊ณ  ์—ฌ๊ธฐ์— numbers์ผ๋ฐ˜ ์ปฌ๋ ‰์…˜( )์„ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปฌ๋ ‰์…˜์— ArrayList<Number>๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค .1

List<String> strings = numbers;
์ด ์ค„์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” " Unchecked assignment... " ๊ฒฝ๊ณ  ๋ฅผ ๋ฐœํ–‰ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋ฅผ ๊ฒฝ๊ณ ํ•˜๋ ค ํ–ˆ์ง€๋งŒ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. List<String>type ์˜ ์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜์„ ๊ฐ€๋ฆฌํ‚ค๋Š” type ์˜ ์ œ๋„ค๋ฆญ ๋ณ€์ˆ˜๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค ArrayList<Number>. ๋ถ„๋ช…ํžˆ ์ด ์ƒํ™ฉ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํž™ ์˜ค์—ผ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ์ปฌ๋ ‰์…˜์— ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ๊ฒฝ๊ณ ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ClassCastExceptionํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ์ด varargs์™€ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ œ๋„ค๋ฆญ๊ณผ ํ•จ๊ป˜ varargs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํž™ ์˜ค์—ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

import java.util.Arrays;
import java.util.List;

public class Main {

   static void polluteHeap(List<String>... stringsLists) {
       Object[] array = stringsLists;
       List<Integer> numbersList = Arrays.asList(66,22,44,12);

       array[0] = numbersList;
       String str = stringsLists[0].get(0);
   }

   public static void main(String[] args) {

       List<String> cars1 = Arrays.asList("Ford", "Fiat", "Kia");
       List<String> cars2 = Arrays.asList("Ferrari", "Bugatti", "Zaporozhets");

       polluteHeap(cars1, cars2);
   }
}
๋ฌด์Šจ ์ผ์ด์•ผ? ์œ ํ˜• ์‚ญ์ œ๋กœ ์ธํ•ด ๊ฐ€๋ณ€ ๊ธธ์ด ์ธ์ˆ˜

List<String>...stringsLists
๋ชฉ๋ก์˜ ๋ฐฐ์—ด์ด ๋ฉ๋‹ˆ๋‹ค List[]. ์ด ๋•Œ๋ฌธ์— Object[] array๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์žˆ๋Š” ๋ณ€์ˆ˜์— ์‰ฝ๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ์œ ํ˜•์ด ์ง€์›Œ์กŒ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์šฐ๋ฆฌ๋Š” Object[]์ž๋ฐ”์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ Object! ์ฒ˜์Œ์—๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก์˜ ๋ฐฐ์—ด๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ ํ˜• ์‚ญ์ œ์™€ ๊ฐ€๋ณ€ ์ธ์ˆ˜ ์‚ฌ์šฉ ๋•๋ถ„์— ์ˆซ์ž ๋ชฉ๋ก์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๊ฐ์ฒด๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ํž™์„ ์˜ค์—ผ์‹œํ‚ต๋‹ˆ๋‹ค. ClassCastException๋ฐฐ์—ด์—์„œ ๋ฌธ์ž์—ด์„ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋˜ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค . ์ฝ˜์†” ์ถœ๋ ฅ:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
๊ฐ„๋‹จํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ varargs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :) ์ด๊ฒƒ์œผ๋กœ ์˜ค๋Š˜ ์ˆ˜์—…์€ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ณผ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹œ๊ณ , ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€ ๋…์„œ๋ฅผ ๊ณต๋ถ€ํ•˜์‹ญ์‹œ์˜ค. " Effective Java "๋Š” ์Šค์Šค๋กœ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! :) ๋‹ค์Œ ์‹œ๊ฐ„๊นŒ์ง€!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION