본문 바로가기
Java

[Java] 가변 인자 / String ... args / 인자(argument) 여러 개

by bkuk 2022. 9. 27.

 

 

[Java] 메서드 오버로딩(Method OverLoading)에 대해서

오버로딩(OverLoading)이란? 사전적인 의미는 '과적하다'라는 뜻을 가지고 있습니다.  기존 C언어에서는 "함수명이 고유하게 존재해야 한다." 라는 것을 시작으로 하나의 함수는 하나의 기능만을 구

starting-coding.tistory.com

 

하나의 클래스 안에서 같은 메소드 이름이 있더라도,

매개변수가 다르다면 메소드를 정의할 수 있다고 오버로딩에 대해서 배웠습니다.

 

 

 

그렇다면, 메소드 이름이 같은매개변수의 개수를 달리해야하는 상황에서,

소드를 무한히 정의를 해줘야할까? 라는 의문이 들겁니다. 

 

void doFunc( String a, String b ) {	
    코드;
}

void doFunc( String a, String b, String c ) {	
    코드;
}

void doFunc( String a, String b, String c , String d) {	
    코드;
}

...

...

..

void doFunc( String a, String b, String c , String d ... String n) {	
    코드;
}

 

이와 같은 상황에서 사용하는 기능이 있습니다.

이 기능은 가변인자(variable argument)라고 합니다.

 

 

가변인자(variable argument) 기능을 사용하는 방법은 아래와 같습니다.

 

    // 타입 ... 변수명
void doFunc( String ... str) {
	
    for(String a : str)
    
  		System.out.println(a);
}

메소드의 매개변수 값을 String ... str 으로 작성해주면 됩니다.

 

 

이론을 배웠으니 예제를 통해 알아보겠습니다.


예제 1

전체 코드

class Method {
    void doFunc( String ... str ) {
	
        for(String s : str)
        
              System.out.println(s);
    }
}

public class variableArgs {

    public static void main(String[] args) {

        Method m = new Method();

        m.doFunc("a");

        m.doFunc("a", "b");

        m.doFunc("a", "b", "c");
    }
    
}

 

 

출력

가변인자는 내부적으로 배열을 생성해서 사용하는 것을 확인할 수 있습니다.

 


예제 2

전체 코드

class Method {
    void doFunc( String a, String ... str) {
	
        for(String s : str)
        
              System.out.println( a + s);
    }
}

public class variableArgs {

    public static void main(String[] args) {

        Method m = new Method();

        m.doFunc("-", "a", "b", "c");
    }
    
}

 

 

 


예제2

 

전체 코드

class Method {
    void doFunc( String a, String ... str ) {
	
        for(String s : str)
        
              System.out.print( a + s );
    }
}

public class variableArgs {

    public static void main(String[] args) {

        Method m = new Method();

        m.doFunc("@", "a", "b", "c", "d");
    }
    
}

 

 


가변인자 메소드를 오버로딩 한다면?

 

 

컴파일 오류가 발생하며, 오류 내용은 컴파일러가 어떤 메소드를 사용 해야하는지 구분하지 못하는 내용

 

댓글