[자바] 가변형 인자

Gammi·2022년 10월 7일
0

JAVA

목록 보기
9/35
post-thumbnail

📚 가변형 인자 (Variable Argument, VARARGS)


  • = 비정형 인자

  • 메서드 파라미터를 하나의 인자만 사용하여 다양하게 전달 받는 기능

  • 동일한 타입의 파라미터를 0개 ~ 무한대로 전달받아 배열로 관리

    -> 전달된 데이터는 개수에 따라 자동으로 배열 생성 후 저장됨

  • 메서드 파라미터 선언 시 데이터타입 뒤에 ... 기호를 표기

  • 다른 파라미터와 가변 인자 조합 가능

  • 가변 인자는 마지막 파라미터로 한 번만 지정 가능





📕 가변 인자를 사용한 메서드 오버로딩


  1. 가변인자를 사용한 메서드 오버로딩 기본
public static void main(String[] args) {
  Variable v = new Variable();
  
  v.print("이대열");
  v.print("이대열", "최성윤");
  v.print("이대열", "최성윤", "이장준");
  // 이름 무한대로 추가 가능
  v.print(); // 파라미터 없어도 가능 (0개부터 가능하니까!)
  
}
class Variable {
  public void print(String...names) {
  // 가변인자를 사용한 메서드 정의 시 데이터 타입 뒤에 ... 기호를 붙임
  // String 타입의 데이터를 0개부터 무한대로 전달 받을 수 있음
    for(int i = 0; i < names.length; i++) {
    // for문을 통해 모든 배열에 접근
      System.out.print(names[i] + " ");
      // print() 메서드를 이용하여 한 줄에 모두 출력
    }
    System.out.println();
    // 없어도 되는데 위에서 여러 개를 출력할 거라서 적어준 거임
  }
 }

  1. 다른 파라미터와 가변 인자를 조합하여 메서드 오버로딩
public static void main(String[] args) {
  Variable v = new Variable();
  v.print(1, "봉재현");
  v.print(2, "봉재현", "김지범");
  // int형 정수는 하나만 넣을 수 있지만
  // String 타입의 데이터는 무한대로 추가 가능
}
class Variable {
  public void print(int num, String...names) {
    System.out.println(num);
    // num 먼저 출력
    // 근데 뒤에 출력해도 상관 없지 않나?
    for(int i = 0; i < names.length; i++) {
      System.out.println(names[i]);
      // 만약에 num 변수 한 번, names 한 번 출력하고 싶다면
      // 여기에 System.out.println(num) 넣으면 됨!
      // 물론 names[i] 출력문 위에!
    }
  }
}

🔗 참고

< 다른 파라미터와 가변 인자를 조합할 때 주의할 점 >

  • 가변 인자가 다른 파라미터보다 앞에 올 수 없다!
  • 가변 인자는 2개 이상 올 수 없음!
public void print(int...nums, String...names){}
// 오류 발생





➕ 가변형 인자 실습


  • 이름을 0개 ~ 무한대로 전달받아 출력하는 메서드 오버로딩

    -> 단, 이름이 하나도 없을 때는 "전달받은 이름 없음!" 출력
    -> 1개 이상 받았을 때는 모두 출력하기
public static void main(String[] args) {
  NamesPrint np = new NamesPrint();
  np.print(); 
  // "전달받은 정수 없음!" 출력됨
  np.print("이대열");
  np.print("이장준", "배승민", "김지범");
}
class NamesPrint {
  public void print(String...names) {
    if(names.length == 0) {
    // 가변형 인자를 사용할 경우 배열로 저장되기 때문에
    // 파라미터의 값이 0이 아닌 배열 길이가 0일 때로 조건 적어주기
    System.out.println("전달받은 이름 없음!");
  } else {
    for(int i = 0; i < names.length; i++) {
      System.out.println(names[i]);
      // for문을 이용하여 모든 이름 출력
    }
  }
}
profile
개발자가 되었어요⭐️

0개의 댓글