기록
[코틀린/Kotlin] 함수의 argument를 다루는 법과 infix 함수 본문
함수를 더 다양한 방법으로 사용할 수 있는 여러 기능들을 알아보자.
코틀린에서도 대부분의 언어에서 지원하는 함수의 overloading이 지원된다.
이것은 '같은 스코프 안'에서 같은 이름의 함수를 여러개 만들 수 있는 기능이다.
이름이 같더라도 파라미터의 자료형이 다르거나, 파라미터의 개수가 다르면 서로 다른 함수로 동작할 수 있다.
fun main() {
read(7)
read("감사합니다")
}
fun read(x: Int) {
println("숫자 $x 입니다")
}
fun read(x: String) {
print(x)
}
함수 이름은 같지만 자료형을 구분하여 함수가 매칭되는 것을 볼 수 있다.
1. default arguments
파라미터를 받아야 하는 함수이지만 별다른 파라미터가 없더라도 기본값으로 동작해야 한다면 어떻게 해야할까?
이때는 default arguments를 사용한다.
fun main() {
deliveryItem("짬뽕")
deliveryItem("책", 3)
deliveryItem("노트북", 30, "학교")
}
fun deliveryItem(name: String, count: Int = 1, destination: String = "집") {
println("${name}, ${count}개를 ${destination}에 배달했습니다")
}
파라미터가 채워진 경우에는 입력받은 파라미터를 사용하여 출력되지만 파라미터가 없다면 지정된 기본값으로 출력되는 것을 볼 수 있다.
2. named arguments
이름과 목적지만 넣고 개수는 기본값을 사용하고 싶다면?
이때는 named arguments를 사용한다.
named arguments는 파라미터의 순서와 관계없이 이름을 사용하여 직접 값을 할당하는 기능이다.
fun main() {
deliveryItem("선물", destination = "친구집")
}
fun deliveryItem(name: String, count: Int = 1, destination: String = "집") {
println("${name}, ${count}개를 ${destination}에 배달했습니다")
}
별도의 파라미터 이름이 지정되지 않은 "선물"이라는 문자열은 순서에 따라 맨 앞의 name으로 들어가게 되지만, destination 임이 지정된 "친구집"이라는 문자열은 해당 파라미터로 할당된다.
3. vararg (variable number of arguments)
vararg 는 같은 자료형을 개수에 상관없이 파라미터로 받고 싶을 때 사용한다.
fun main() {
sum(1, 2, 3, 4)
}
fun sum(vararg numbers: Int) {
var sum = 0
for(n in numbers)
{
sum += n
}
print(sum)
}
vararg가 붙은 파라미터는 마치 배열처럼 for문으로 참조할 수 있다.
vararg는 개수가 지정되지 않은 파라미터라는 특징이 있으므로 다른 파라미터와 같이 쓸 때는 반드시 맨 마지막에 위치해야 한다.
fun sample(text: String, vararg x: Int)
4. infix 함수
마지막으로, 마치 연산자처럼 쓸 수 있는 infix 함수를 알아보자.
함수를 정의할 때 앞에 infix를 붙인 후, 함수 이름을 infix 함수가 적용될 자료형.이름 으로 지정한다.
Int 값에 사용할 multiply() 함수를 만들어보자.
fun main() {
println(6 multiply 4)
println(6.multiply(4))
}
infix fun Int.multiply(x: Int): Int = this * x
좌측에 붙은 6이 infix 함수가 적용되는 객체 자신, 즉 this 에 해당하고 우측에 붙은 4가 파라미터인 x에 해당한다.
main 함수 두번째 라인과 같이 일반적인 클래스의 함수처럼도 사용이 가능하다.
참고로, 클래스 안에서 infix 함수를 선언할 때에는 적용할 클래스가 자기 자신이므로 클래스 이름은 쓰지 않는다.
코틀린은 많은 언어들이 지원하는 함수의 다양한 편의기능을 거의 대부분 가지고 있다.
이를 이용하면 더욱 편리한 코딩이 가능해질 것이다.
https://www.youtube.com/watch?v=q7GV68jKLVM&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=23
위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.
'[Study] > Kotlin' 카테고리의 다른 글
[코틀린/Kotlin] Data Class와 Enum Class (0) | 2022.05.10 |
---|---|
[코틀린/Kotlin] 중첩클래스와 내부클래스 (0) | 2022.05.10 |
[코틀린/Kotlin] null처리 연산자와 동일성 확인 (0) | 2022.05.09 |
[코틀린/Kotlin] 문자열을 다루는 법 (0) | 2022.05.09 |
[코틀린/Kotlin] 데이터를 담는 리스트 (0) | 2022.05.09 |