Uing? Uing!!

[내 맘대로 정리한 Kotlin] vararg(가변인자)로 파라미터 원하는 개수만큼 받기 본문

Kotlin

[내 맘대로 정리한 Kotlin] vararg(가변인자)로 파라미터 원하는 개수만큼 받기

Uing!! 2020. 12. 11. 00:34
반응형

가변적인 파라미터 개수: vararg를 사용하지 않는다면

함수를 사용하다 보면 파라미터로 몇 개의 인자를 받게 될지 정확하게 정할 수 없는 경우가 있다.

또는, 처음에 설계했던 구조의 파라미터 개수만으로 원하는 조건을 만족시킬 수 없는 경우가 있다.

 

예를 들어 아래 코드는 "입력값: A"라는 문자열을 출력한다.

fun main(){
    printData("입력값", "A")
}

fun printData(name: String, value: String){
    val result = "$name: $value"
    println(result)
}

그런데, printData함수를 printData("입력값", "A", "B")와 같이 입력해서 "입력값: AB"도 출력하고 싶어졌다면?

첫 번째 방법: 함수 오버라이딩하기

간단하게는 이렇게 오버라이딩을 할 수도 있겠다.

fun main(){
    printData("입력값", "A")
    printData("입력값", "A", "B")
}

fun printData(name: String, value: String){
    val result = "$name: $value"
    println(result)
}

fun printData(name: String, value1: String, value2: String){
    val result = "$name: $value1$value2"
    println(result)
}

두 번째 방법: 리스트로 바꾸어 받기

또는 입력 형태를 바꾸어서, 이렇게 리스트로 값을 입력해줄 수도 있을 것이다.

fun main(){
    printData("입력값", listOf("A"))
    printData("입력값", listOf("A","B"))
}

fun printData(name: String, valueList: List<String>){
    var result = "$name: "
    for (value in valueList) result += value
    println(result)
}

하지만 이렇게 되면 printData함수를 이용하기 위해서 간단한 데이터도 리스트로 변환해 사용해야 한다.

이 외에도 다양한 이유로 입력된 파라미터의 개수를 가변적으로 사용하고 싶을 때가 있다.

이럴 때 사용할 수 있는 것이 vargargs(가변인자)이다.

vararg(가변인자)

vararg는 '내가 파라미터 값들을 받을 건데, 몇 개 받을지는 몰라'라는 의미를 갖는다.

가변적인 개수로 받을 파라미터 리스트의 이름 앞에 vararg라는 지시자를 붙여주기만 하면 활용할 수 있다.

 

위의 예시를 vararg를 사용해 다시 작성하면 아래와 같다.

 

fun main(){
    printData("입력값", "A")
    printData("입력값", "A", "B")
}

fun printData(name: String, vararg values: String){
    var result = "$name: "
    for (value in values) result += value
    println(result)
}

이렇게 활용하면 첫 번째 방법과 비교했을 때에는 불필요한 오버라이딩이 발생하지 않는다는 점이 좋고,

두 번째 방법과 비교했을 때에는 리스트를 생성하지 않고 원하는 형식으로 함수를 이요할 수 있다는 점이 좋다.

 

다만 printData("입력값", "A", "B")를 실행할 때 결국 vararg는 "A"와 "B"를 묶어 하나의 Array로 만들어 사용한다.

따라서, 불필요하게 코드상에서 리스트를 만들어 넘겨야 하는 수고를 덜어 주는 지시자라고 생각하면 되겠다.

반응형
Comments