가변인자

JDK 1.5부터 매개변수의 개수를 동적으로 지정할 수 있음
이 기능을 가변인자 (variable argument)라고 함
void test(String ... args){}; 와 같이 메서드 명(타입 ... 파라미터명) 으로 작성해주면 된다.
내부적으로 배열을 이용하며 가변인자가 선언된 메서드를 호출할때 마다 배열이 새로 생성됨

  • 즉 인자값을 개수에 상관없이 넣어서 사용할 수 있다는 말

  • 테스트 해보니 가변인자는 파라미터의 순서중 마지막에 있어야 컴파일 에러가 나지 않음

    void test(String ... args, String str){} // Error

  • 가변인자와 매개변수의 타입을 배열로하는 것과 어떤차이가 있는가?
    반드시 인자를 지정해줘야 하기때문에 가변인자처럼 인자를 생략할 수 없음

      String concatenate(String[] srtrs){};
    
      String result = concatenate (); // Error
      String result = concatenate (null); 
      String result = concatenate (new String [0]);
  • 가능하면 가변인자를 사용한 메서드는 오버로딩 하지 않는 것이 좋음

  • 예시

    public static void test (String ... strings) {
    
      System.out.println();
      System.out.println("───────────────");
      System.out.println(strings.length);
    
      for (int i = 0; i < strings.length; i++) {
        System.out.println(strings[i]);
      }
    
      System.out.println("───────────────");
    
    }
    
    public static void main(String[] args) {
    
    String t1 ="1";
    String t2 ="2";
    String t3 ="3";
    String t4 ="4";
    String t5 ="5";
    
    test(); // 비어있어도 Ok
    // test(new String[] {"a", "b"}); // 배열이어도 OK
    test(t1, t2, t3, t4, t5);
    
    }

+ Recent posts