Coding Memo
Kotlin 함수 파라미터 본문
Kotlin 함수 파라미터에 관련한(?) 특징들이다.
Overloading
코틀린도 오버 로딩 기능이 있다!
인자의 개수나 타입이 다르면 가능하다.
간단하게 예시만 보자.
fun main() {
printNumber(1)
printNumber(3, 2)
}
fun printNumber(n: Number) {
println(n)
}
fun printNumber(n: Number, loop: Int) {
var i: Int = 0
while(loop > i) {
println(n)
i++
}
}
Default Arguments
함수를 호출 할 때 해당 값을 인자로 주지 않아도 default arguments로 돼 있으면 그 값으로 함수를 실행한다.
(파이썬을 잠깐 볼 때 파이썬에도 이런 기능이 있었다.)
fun main() {
printTest("A")
printTest()
}
fun printTest(str: String = "TEST") {
println(str)
}
주의: default arguments가 있어 이를 이용하려고 할 때 이 뒤에 default arguments가 오지 않아서 반드시 이 인자를 써야 하는 경우
인자를 순서대로 받아들이기 때문에 앞에 인자를 생략하고 뒤의 인자를 사용할 수 없다.
-> named arguments 이용
fun main() {
printTest("A", 3)
printTest(3)
}
fun printTest(str: String = "TEST", num: Int) {
println(str)
println(3)
}
Named Arguments
말 그대로 이름이 있는 인자이다.
위의 주의사항에서 str 변수를 default로 쓰고 num만 사용하고 싶을 때는 어떻게 해야 할까?
num이란 변수에 직접 값을 대입을 해주면서 인자를 넣으면 된다.
그러면 의도한대로 출력이 되는 것을 확인할 수 있다.
fun main() {
printTest("A", 3)
printTest(num = 3)
}
fun printTest(str: String = "TEST", num: Int) {
println(str)
println(3)
}
Variable number of arguments (vararg)
(개인적인 이야기)
시스템 프로그래밍을 배울 때, execl() 함수에서 실행 인자를 2번째 파라미터부터 마지막 파라미터 전까지 사용하고 마지막 파라미터를 '0' 값을 줌으로써 '여기까지가 실행 인자이다.'라는 것을 표시했었다는 것을 문득 떠올렸다. 코틀린에서는 따로 마지막은 표시를 하지 않아도 된다. (관련 없는 이야기인 거 같다.)
vararg는 같은 자료형을 개수에 상관 없이 파라미터로 받고 싶을 때 사용한다.
단, 몇 개를 받을지 알 수 없으므로 가장 마지막으로 인자로 넣어야 한다.
인자로 넣을 때 인자 이름 앞에 넣는다. (타입 앞에 넣거나 타입처럼 취급하는 것이 아니다.)
fun main() {
println("average(1, 2, 3, 4, 5): ${avg(5, 1, 2, 3, 4, 5)}")
}
fun avg(space: Int, vararg values: Int) : Double {
var sum = 0
for (n in values) {
sum += n
}
if (sum == 0) {
return 0.0
}
return sum / space.toDouble()
}
vararg로 선언한 인자는 in 연산자를 이용해 그 값을 얻어 올 수 있다.
for (n in values)
참고1: IDE에서 이렇게 뜬다.
한 번에 묶여서 values로 나타내어지고 있다.
참고 2: toDouble()은 평균값이 소수점이 나올 수 있으므로, space와 sum 값이 Int 기 때문에 toDouble() 함수로 써서 Double 형으로 바꿔주어 결과값이 Double로 나오게 해 준 것뿐이다.
'Language > Kotlin' 카테고리의 다른 글
Kotlin 열거형 클래스 (0) | 2021.01.08 |
---|---|
Kotlin 중첩 / 내부 클래스 (0) | 2021.01.08 |
Kotlin null 값 (0) | 2021.01.06 |
Kotlin 제네릭 (0) | 2021.01.06 |
Kotlin 캐스팅 (0) | 2021.01.06 |