728x90
반응형
Java에서도 인자 값의 개수를 정해 놓지 않고 받을 경우 사용하는 문법이 있다. 가령 "String...str"와 같은 방식이다.
Kotlin에서는 varargs 라는 예약어를 사용하면 된다.
fun v(s: String, vararg d: Double) {
println("String : $s")
for (n in d) {
print("$n ")
}
println();
}
fun main() {
v("abc", 1.0, 2.0)
v("def", 1.0, 2.0, 3.0, 4.0)
v("ghi", 1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
}
varargs로 정의 된 인자값은 Array로 인식된다. kotlin에서 Array는 Java에서의 array와 같다.
varargs로 정의하여 Array로 받아 들인 인자값을 List 처럼 사용하게 되면 어떻게 될까?
fun varargLikeList(vararg ints: Int) {
println("Size: ${ints.size}\n" +
"Sum: ${ints.sum()}\n" +
"Average: ${ints.average()}")
}
fun main() {
varargLikeList(10, -3, 8, 1, 9)
}
List 처럼 동작함을 볼 수 있다.
vararg로 인자를 받는 곳이라면 Array 타입으로 인자를 넘길 수 있다. 하지만 실제 Array를 넘기는 것이 아니라 안에 들어 있는 값을 풀어서 넘겨 줘야 하는데 이 때는 스프레드 연산자 * 를 사용해야 한다.
fun spreadOperator() {
val array = intArrayOf(4, 5)
println(sum(1, 2, 3, *array, 6))
val list = listOf(9, 10, 11)
println(sum(*list.toIntArray()))
}
fun sum(vararg numbers: Int): Int {
var total = 0
for (n in numbers) {
total += n
}
return total
}
fun main() {
spreadOperator()
}
위와 같이 array 변수에 담은 4, 5의 Array를 죽 펼쳐서 sum 함수에 값을 전달할 수 있다.
콘솔에서 인자값을 넘겨 받을 수도 있다. 이럴 때도 여러개의 인자를 받을 수 있는데 이 때는 main 함수의 인자를 Array로 받으면 된다.
fun main(args: Array<String>) {
for (a in args) {
println(a)
}
}
위와 같이 하게 되면 String으로 된 인자 여러개를 받아 들이겠다는 말이 된다.
intellij에서 실행하게 될 경우 실행 옵션을 다음과 같은 곳에서 수정해 주면 된다.
"Edit Configurations..."를 누르게 되면 다음과 같이 나오게 되는데, 여기서 program arguments에 한 칸씩 띄어서 입력하면 된다.
실행 결과는 다음과 같다.
728x90
반응형
'Develop! > Kotlin' 카테고리의 다른 글
Map in Kotlin (0) | 2023.08.04 |
---|---|
Set in Kotlin (0) | 2023.08.02 |
list int kotlin (0) | 2023.07.31 |
생성자 in kotlin (0) | 2023.07.27 |
'in' in kotlin (0) | 2023.07.26 |