본문 바로가기

Language/Kotlin

[Kotlin] 함수의 다양한 기능

728x90
반응형

오버로딩

: 같은 스코프 안에서 같은 이름의 함수를 여러 개 만들 수 있는 기능. 함수의 이름이 같더라도 파라미터의 타입이나 개수가 다르면 서로 다른 함수로 동작한다.

 

* 파라미터의 이름만 다르고 자료형과 개수가 동일하다면 오버로딩을 할 수 없다.

fun same(a: Int, b: Int)

fun same(x: Int, y: Int)

fun main(){
    read(7)  // 숫자 7 입니다
    read("감사합니다")  // 감사합니다
}

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

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

default arguments

: 파라미터를 받아야 하는 함수이지만 별다른 파라미터가 없더라도 기본값으로 동작

fun main(){
    deliveryItem("짬뽕")  // 짬뽕, 1개를 집에 배달하였습니다
    deliveryItem("책", 3)  // 책, 3개를 집에 배달하였습니다
    deliveryItem("노트북", 30, "학교")  // 노트북, 30개를 학교에 배달하였습니다
}

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

 

이름과 목적지만 넣고 개수는 기본값을 이용하고 싶다면?? (중간 파라미터를 비울 수 없음)

named arguments

: 파라미터의 순서와 관계없이 파라미터의 이름을 사용하여 직접 파라미터의 값을 할당하는 기능

fun main(){
    deliveryItem("선물", destination = "친구집")  // 선물, 1개를 친구집에 배달하였습니다
}

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

variable number of arguments (vararg)

: 같은 자료형을 개수에 상관없이 파라미터로 받고 싶을 때 사용

fun main(){
    sum(1, 2, 3, 4)  // 10
}

fun sum(vararg numbers: Int){
    var sum = 0

    for(n in numbers){
        sum += n
    }

    print(sum)
}

* vararg는 개수가 지정되지 않은 파라미터라는 특징이 있으므로 다른 파라미터와 같이 쓸 때는 반드시 맨 마지막에 위치해야 한다.

fun sample(text: String, vararg x: Int)

infix function

fun main(){
    println(6 multiply 4)  // 24
    println(6.multiply(4))  // 24
}

infix fun Int.multiply(x: Int): Int = this * x

좌측에 붙은 6은 infix 함수가 적용되는 객체 자신(this), 우측에 붙은 4는 파라미터인 x에 해당됨

* class 안에서 infix 함수를 선언할 때에는 적용할 클래스가 자기 자신이므로 클래스 이름은 쓰지 않는다.

infix fun multiply(x: Int): Int = this * x

728x90
반응형

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] Data Class와 Enum Class  (0) 2023.09.21
[Kotlin] 중첩클래스와 내부클래스  (0) 2023.09.20
[Kotlin] null 처리와 동일성의 확인  (0) 2023.09.19
[Kotlin] 문자열 함수  (0) 2023.09.18
[Kotlin] 컬렉션(1) 리스트  (0) 2023.09.18