- Today
- Yesterday
- Total
메이쁘
[Kotlin] vararg parameter를 가진 함수에 Int 타입의 Array를 넣을 경우! (Array<String>은 되는데, Array<Int>는 왜 안되지?) 본문
[Kotlin] vararg parameter를 가진 함수에 Int 타입의 Array를 넣을 경우! (Array<String>은 되는데, Array<Int>는 왜 안되지?)
메이쁘 2022. 3. 22. 12:01안녕하세요.
fun sum(vararg nums: Int) = nums.sum() // parameter로 받은 숫자들을 전부 더하는 함수
와 같이, 간단한 함수를 가지고 테스트를 해봤습니다.
vararg nums를 parameter로 받는 함수인데요.
vararg는 가변인자. 즉, 매개변수의 개수를 동적으로 지정해 줄 수 있게 하는 변수 입니다.
그렇기 때문에, 배열을 parameter로 넘길 수 있습니다.
근데 왜 이 글을 포스팅하게 되었냐!!
String 같은 경우, arrayOf() 함수를 사용해서 Array<String> 으로 형변환한 뒤
fun showAll(vararg s: String) { // parameter로 받은 문자열을 전부 보여주는 함수
println(s.joinToString())
}
와 같은 함수의 parameter로 넣는 경우,
showAll(test) // // error(Type mismatch!)
showAll(*test) // *(spread operator) 를 앞에 붙이면 가능해짐
*(spread operator)를 앞에 붙이면 오류가 발생하지 않고 동작합니다.
하지만,
Int같은 경우에는??
와 같은 오류를 뱉어냅니다..
읭? String이랑 Int랑 무슨 차이가 있다고..??
1. 원인 및 해결
오호.. stackoverflow 스승님의 말에 따르면,
arrayOf() 함수를 사용하면 Array<Int> 가 아니라, Array<Integer>로 변환되기 때문에, Int와 Integer는 엄연히 다르므로, 컴파일되지않고 오류라고 판단한다는 겁니다.
그렇기 때문에, Integer -> Int 로 형변환 해야하는데요.
형변환 하는 방법은 두 가지가 있습니다.
1) intArrayOf() 함수를 사용
2) arrayOf() 함수 사용 후 toIntArray() 함수로 Array<Integer> -> Array<Int>로 형변환
그 결과로 위 캡쳐화면 보시면
이제 둘 다 오류가 발생하지 않습니다..!!!!
하나 배워갑니다..!!!
합합합
감사합니다.
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] contract 에 대한 정확한 이해 - contract는 컴파일러에게 보여주는 용도!(+ callsInPlace 활용) (1) | 2022.03.30 |
---|---|
[Kotlin] lateinit, lazy 문법 간단 정리 및 사용방법 ! (0) | 2020.06.13 |
[Kotlin] 코틀린의 Coroutine 이란 무엇일까 ? (0) | 2020.06.12 |