[Kotlin] 함수의 argument 다루기 & infix 함수 설명 & 예제

728x90

코틀린도 함수의 overloading 지원됨
: 같은 Scope 안에서 같은 이름의 함수를 여러개 만들 수 있는 것
ex)
fun same (x: Int)
fun same (x: Int, text: String)
fun same (x: Int, y: Int)

  • 다만 패러미터 이름만 같은 경우는 오버로딩 할 수 없다.

overloading 예시

  • 패러미터의 형식에 맞게 자동으로 함수가 매칭되는 것을 확인 할 수 있다
fun main() {
    read(7)
    read("감사합니다")
}

fun read(x: Int) {
    println("숫자 $x 입니다")
}

fun read(x: String) {
    println(x)
}

 

디폴트 매개 변수 (default arguments)

  • 별다른 패러미터가 없을떄도 기본값으로 동작하기 위해 사용
  • 패러미터가 채워지지 않았을 경우 자동으로 채워지는 것을 확인 가능
fun main() {
    deliveryItem("짬뽕")
    deliveryItem("책",3)
    deliveryItem("노트북",30,"학교")
}

fun deliveryItem(name: String, count: Int = 1, destination:String = "집") {
    println("${name}, ${count}개를 ${destination}에 배달하였습니다")
}

명명된 인수 (named arguments)

  • 이름과, 장소만 지정하고 갯수를 기본값으로 사용하고 싶을때 (중간에 있는 값만)
    사용한다
  • 순서에 상관없이 직접 패러미터의 값을 할당하는 기능
deliveryItem("선물", destination = "친구집")

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
    }
    println(sum)
}

 

infix 함수

  • 마치 연산자처럼 사용 할 수 있는 기능
fun main() {

    //6 -> this , 5 -> x
    println(6 multiply 4)

    println(6.multiply(4))

}

//함수 이름을 infix 함수가 적용될 자료형 이름으로 지정
//적용할 클래스가 자기자신 이므로 클래스 이름은 쓰지 않는다
infix fun Int.multiply(x: Int): Int = this * x

 

728x90

댓글

Designed by JB FACTORY