티스토리 뷰
반응형
코틀린에서는 함수에서 여러개의 가변인자를 받기 위해서는 vararg 키워드를 사용하면된다.
vararg로 받은 인자는 마치 배열처럼 이터레이션이 가능하다.
만약 vararg로 받은 인자를 고대로 다른 함수로 똑같이 전달해야하는 경우가 있다고 해보자.
당연하게 이런식으로 작성할테지만, 오류가 나는 코드다.
fun showAll(vararg strings: String) {
showAll2(strings)
}
fun showAll2(vararg strings: String) {
strings.forEach { println(it) }
}
해결방법은 두 가지다.
fun showAll(vararg strings: String) {
showAll2(*strings) // 에스터리스크 추가
}
fun showAll2(strings: Array<out String>) { // 인자 타입을 변경
strings.forEach { println(it) }
}
왜 이렇게 vararg를 고대로 넘겨주는데 다른 방식으로 처리를 해야하는 걸까?
이유는 vararg로 최초로 받은 후는 해당 가변인자가 배열로 패키징 되기 때문이다. (그래서 이터레이션도 가능하다.)
GPT-4의 답변
정리하자면 가변인자로 넘겨받으면 이를 배열로 패키징하고, 이를 또 다른 가변인자를 받는 함수로 넘겨주려면 배열 타입으로 받던가, 에스터리스크를 추가해주면 된다.
반응형