본문 바로가기
코틀린

[코틀린] 함수 | 단순화 | 익명 함수

by 아스키의 공부방 2020. 12. 10.
728x90
반응형

하나 이상의 표현식을 함수로 그룹화할 수 있습니다. 결과가 필요할 때마다 동일한 일련의 표현식을 반복하는 대신 함수에 표현식을 포함한 다음 함수를 호출할 수 있습니다.

함수를 선언하려면 fun 키워드 뒤에 함수 이름이 오도록 사용합니다. 그런 다음 함수에 사용되는 입력 유형(있는 경우)을 정의하고 함수에서 반환하는 출력 유형을 선언합니다. 함수의 본문에서는 함수를 호출할 때 호출되는 표현식을 정의합니다.

이전 예를 기반으로 완성된 Kotlin 함수는 다음과 같습니다.

fun generateAnswerString(): String {
    val answerString = if (count == 42) {
        "I have the answer."
    } else {
        "The answer eludes me"
    }

    return answerString
}

위 예에서 함수의 이름은 generateAnswerString입니다. 입력 값은 받지 않으며, String 유형의 결과를 출력합니다. 함수를 호출하려면 함수의 이름 뒤에 호출 연산자(())를 사용합니다. 아래 예에서 answerString 변수는 generateAnswerString()의 결과에 따라 초기화됩니다.

val answerString = generateAnswerString()

아래 예와 같이 함수에서는 인수를 입력으로 사용할 수 있습니다.

fun generateAnswerString(countThreshold: Int): String {
    val answerString = if (count > countThreshold) {
        "I have the answer."
    } else {
        "The answer eludes me."
    }

    return answerString
}

 

함수를 선언할 때 인수의 개수와 유형을 지정할 수 있습니다. 위 예에서 generateAnswerString()은 Int 유형의 countThreshold 인수 한 개를 사용합니다. 함수 내에서 이름을 사용하여 인수를 참조할 수 있습니다.

이 함수를 호출할 때 함수 호출 괄호 안에 인수를 포함해야 합니다.

val answerString = generateAnswerString(42)

 

함수 선언 단순화

generateAnswerString()은 매우 간단한 함수입니다. 이 함수는 변수를 선언한 다음 즉시 반환합니다. 아래 예와 같이 단일 표현식의 결과가 함수에서 반환되는 경우, 함수에 포함된 if-else 표현식의 결과를 직접 반환하여 로컬 변수 선언을 건너뛸 수 있습니다.

fun generateAnswerString(countThreshold: Int): String {
    return if (count > countThreshold) {
        "I have the answer."
    } else {
        "The answer eludes me."
    }
}

반환 키워드를 할당 연산자로 바꿀 수도 있습니다.

fun generateAnswerString(countThreshold: Int): String = if (count > countThreshold) {
        "I have the answer"
    } else {
        "The answer eludes me"
    }

 

익명 함수

모든 함수에 이름이 필요하지는 않습니다. 일부 함수는 입력과 출력에 의해 더 직접적으로 식별됩니다. 이러한 함수를 익명 함수라고 합니다. 이 참조를 사용하여 나중에 익명 함수를 호출하면 익명 함수 참조를 유지할 수 있습니다. 다른 참조 유형과 마찬가지로 애플리케이션에서 참조를 전달할 수도 있습니다.

val stringLengthFunc: (String) -> Int = { input ->
    input.length
}

이름이 지정된 함수와 마찬가지로 익명 함수는 표현식을 제한 없이 포함할 수 있습니다. 함수의 반환 값은 최종 표현식의 결과입니다.

위 예에서 stringLengthFunc는 String을 입력으로 사용하고 String 입력 길이를 Int 유형의 출력으로 반환하는 익명 함수 참조를 포함합니다. 따라서 함수의 유형은 (String) -> Int로 표시됩니다. 하지만 이 코드는 함수를 호출하지 않습니다. 함수의 결과를 가져오려면 이름이 지정된 함수처럼 호출해야 합니다. 아래 예와 같이 stringLengthFunc를 호출할 때 String을 공급해야 합니다.

val stringLengthFunc: (String) -> Int = { input ->
    input.length
}

val stringLength: Int = stringLengthFunc("Android")

 

 

 

 

 

 

 

728x90
반응형

'코틀린' 카테고리의 다른 글

[코틀린] 데이터베이스 헬퍼  (0) 2020.12.11
[코틀린] 리사이클러뷰  (0) 2020.12.11
[코틀린] 공부1  (0) 2020.12.10
[코틀린] 조건부  (0) 2020.12.10
[코틀린] 변수 선언 | Null 안전  (0) 2020.12.10