본문 바로가기
Kotlin

가변인자 알아보기 ( ... , vararg

by 봄석 2019. 10. 18.

가변 인자 알아보기

자바의 가변 인자와 코틀린의 가변 인자를 비교하여 알아보도록 하겠습니다.

 

 

 

Java의 가변인자

자바는 오버 로딩을 통하여 매개변수의 개수 타입이 달라도 같은 이름의 메서드명으로 동일 기능을 구현할 수 있습니다.

그런데..

String divide(String s1, String s2){...}
String divide(String s1, String s2, String s3){...}
String divide(String s1, String s2, String s3, String s4){...}
String divide(String s1, String s2, String s3, String s4, String s5){...}

위와 같이 매개변수가 끝없이 많아진다면..?

 

위 같은 문제를 위해 JDK1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데

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

 

자바에서는 아래와 같이 가변 인자를 사용하게 됩니다.

void sum(String...str) {
        for(String a:str)
            System.out.println(a);
}

 

빈 인자 값이나 같은 타입에 배열도 인자 값으로 줄 수 있고

가변 인자는 내부적으로 배열을 생성해서 사용합니다. (향상된 for문 str, 인자 값으로 배열 넣어짐)

 

 

 

Kotlin의 가변 인자 vararg

자바에도 가변 인자가 있듯이 코틀린에도 가변인자가 있습니다.

자바의 가변 인자는...이라는 period를 3개 써서 나타냈다.

코틀린에서 period를 2개 써서 나타내는 지시자가 있으므로 아마 헷갈리지 않게 하기 vararg라는 키워드를 사용합니다.

변수 이름에 vararg라고 선언하고 사용하면 됩니다.

fun sum(vararg numbs:Int):Int{
    var result = 0
    for(num in numbs){
        result += num
    }
    return result
}

fun main(args: Array<String>) {
    println(sum(1,2,3,4,5,6,7,8,9,10))
}

vararg로 선언된 iterable(순회 가능)한 객체의 경우에 내부적으로 sum 같은 메서드를 사용할 수 있습니다.

 

 

'Kotlin' 카테고리의 다른 글

Kotlin Property , Custom Getter & Setter  (2) 2019.10.07
Sealed Class  (0) 2019.09.02
Fold, Reduce  (0) 2019.08.29
고차함수 (Higher-order-function) ,1급시민[객체,함수] (First-Class Citizen)  (0) 2019.08.29
Reflection  (0) 2019.06.08

댓글