하나 이상의 표현식을 함수로 그룹화할 수 있습니다. 결과가 필요할 때마다 동일한 일련의 표현식을 반복하는 대신 함수에 표현식을 포함한 다음 함수를 호출할 수 있습니다.
함수를 선언하려면 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")
'코틀린' 카테고리의 다른 글
[코틀린] 데이터베이스 헬퍼 (0) | 2020.12.11 |
---|---|
[코틀린] 리사이클러뷰 (0) | 2020.12.11 |
[코틀린] 공부1 (0) | 2020.12.10 |
[코틀린] 조건부 (0) | 2020.12.10 |
[코틀린] 변수 선언 | Null 안전 (0) | 2020.12.10 |