티스토리 뷰

반응형

코틀린 내에서 좀 더 자주 쓰이고, 심화된 함수를 살펴보도록 합시다.

 

1. 디폴트 값을 갖는 함수

 

여기서 디폴트 값이란, 인수에 전달되는 인자값이 없는 경우에 기본으로 설정된 값을 사용한다는 의미입니다. 기본값으로 보시면 됩니다.

 

아래의 예시를 보면 다음과 같습니다.

fun plusDefault(first: Int, second: Int = 5): Int {
    val result: Int = first + second
    return result
}
fun main(array: Array<String>) {
    
    //디폴트 값을 갖는 함수 호출하기
    val result = plusDefault(30, 50)
    println(result)
    val result1 = plusDefault(30)
    println(result1)

}

plusDefault 함수에서 첫 인수의 인자값은 설정되어 있지 않으나, 두 번째 인수의 인자값은 5로 기본 설정되어 있습니다. 만약 두 번째 인자값이 없다면, 기본적으로 5를 사용하게 됩니다.

따라서 result의 결과는 80이 되고, result1의 결과는 35가 됩니다.

 

2. 반환값이 없는 함수

 

코틀린에서 반환값이 없는 함수는 Unit 함수라고 부릅니다. 다른 언어에서는 Void 함수라고 부르는데, 코틀린에서는 반환값이 없는 경우 Unit 타입을 사용합니다.

Unit 타입은 생략이 가능하며, 명시하게 될 경우 색상이 회색으로 표시되는 차이가 있습니다.

 

다음의 예시를 살펴봅니다.

반응형
fun printVoid1(first: Int, second: Int): Unit {
    val result: Int = first + second
    println(result)
}

fun printVoid2(first: Int, second: Int) {
    val result: Int = first + second
    println(result)
}
fun main(array: Array<String>) {
    
   //반환값이 없는 함수
    val result = printVoid1(10, 40)
    println(result)
    
    val result1 = printVoid2(10, 40)
    println(result1)

}

예시에서 printVoid1과 2의 차이는 Unit이 있고, 없고의 차이입니다. Unit은 말그대로 반환값이 없다는 것을 의미하므로 직접 명시해주거나 생략을 해도 무방합니다. 실제 메인 함수에서 사용하면 결과는 동일합니다.

 

 

Unit 함수를 이해했으니, 메인 함수도 분석이 가능합니다.

fun main(array: Array<String>) {
    함수 내용
}

메인 함수의 경우, array라는 인자는 타입이 Array<String>이며, 반환값은 없습니다. 사실 Unit이 생략되어 있는 것입니다. :)

 

3. 축약형 함수

 

코틀린에서 함수를 축약형으로 표현 가능합니다.

 

아래의 예시를 살펴봅니다.

fun plusShort(first: Int, second: Int) = first + second
fun main(array: Array<String>) {
    val result = plusShort(60, 70)
    println(result)
}

예시와 같이, 리턴 타입을 명시하지 않고 바로 = 기호를 이용해 함수 내용을 써주면 됩니다. 

 

4. 인자가 여러 개인 함수. 가변인자 함수.

 

코틀린에서 여러 개의 인자를 받는 경우, 다음과 같이 함수 선언이 가능합니다.

fun plusMany(vararg numbers: Int){
    for (number in numbers) {
        println(number)
    }
}
fun main(array: Array<String>) {
    //여러 인자를 받는 함수
    val result = plusMany(1,2,3,4,5)
    println(result)
}

여기서 vararg의 의미는 1~n개의 인자값을 받을 수 있다는 의미입니다. 원하는 만큼 개수의 인자값을 넣을 수 있습니다.

 

5. 내부 함수

 

내부 함수는 말그대로 함수 내에 함수가 또 있는 것을 의미합니다.

 

아래의 예시를 바로 살펴봅니다.

fun showPlus(first: Int, second: Int): Int {
    println(first)
    println(second)

    fun plus(first: Int, second: Int): Int {
        return first + second
    }

    return plus(first, second)
}
fun main(array: Array<String>) {

    val result = showPlus(4, 5)
    println(result)
    
}

showPlus 함수 안에 plus 함수가 있는 것을 볼 수 있습니다. showPlus 함수는 plus 함수를 리턴하게 됩니다.

따라서, 메인 함수의 결과 값은 당연히 9가 됩니다.

반응형
댓글