하나의 클래스 안에서 같은 메소드 이름이 있더라도,
매개변수가 다르다면 메소드를 정의할 수 있다고 오버로딩에 대해서 배웠습니다.
그렇다면, 메소드 이름이 같은, 매개변수의 개수를 달리해야하는 상황에서,
메소드를 무한히 정의를 해줘야할까? 라는 의문이 들겁니다.
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");
}
}
가변인자 메소드를 오버로딩 한다면?
컴파일 오류가 발생하며, 오류 내용은 컴파일러가 어떤 메소드를 사용 해야하는지 구분하지 못하는 내용
'Java' 카테고리의 다른 글
[Java] static 변수에 대해서 / 클래스 멤버 변수 / 인스턴스 멤버변수 (0) | 2022.09.28 |
---|---|
[Java] 얕은 복사에 자세히 알아보면? / Shallow Copy (0) | 2022.09.28 |
[Java] 정수(integer), operator(연산자), 정수(integer) / 숫자, 연산자, 숫자를 입력받아 연산된 결과를 출력하는 Method 선언 및 호출 (0) | 2022.09.27 |
[Java] 메서드 오버로딩(Method OverLoading)에 대해서 (0) | 2022.09.27 |
[Java] 단수를 입력 받아서 구구단을 출력하는 Method 선언 후 호출 (0) | 2022.09.27 |
댓글