코틀린에서 사용하는 함수(Function)에 대해 알아보고 간단한 사용법에 대해 기술한다.
코틀린에서 특정 작업을 수행하고, 필요에 따라 값을 반환하는 코드 블록 그리고 프로그램의 논리적 단위를 나누고, 코드의 재사용성과 가독성을 높이는 데 중요한 역할 을 하는 것을 함수(Function) 라고 부른다.
자바에 익숙한 사람들은 명칭이 조금 익숙하지 않을 수도 있다. 자바에서는 메소드(Method)라고 불러왔으니 조금 익숙하지 않을 수 있다. 코틀린에서는 주로 함수라고 부르니 본 게시물을 포함하여 모든 기능을 함수라고 명칭한다
일반 함수 선언 및 사용
: 코틀린에서 사용하는 가장 기본적인 형태의 함수이다.
// Top-Level Function
fun sum(a: Int, b: Int, c: Int = 0) : Int { // 추론이 가능하면 리턴타입 생략 가능
return a + b
}
fun sumLine(a: Int, b: Int) : Int = a + b // 한줄표현 가능
fun main() {
println(sum(10,20))
println(sum(a = 10, b = 20))// 파라미터를 명시적으로 지정할 수 있음.
println(sumLine(30,40))
}
같은 타입의 여러 파라미터 받기 (가변인자) -> vararg를 사용한다.
fun main() {
printAll("a", "b", "c") // 콤마(,)로 구분하여 전달
println()
val stringArray = arrayOf("d", "e", "f")
printAll(*stringArray) // 배열로 전달. (앞에 * 기호 넣어야한다.)
}
fun printAll(vararg strings: String)
{
for (str in strings){
println(str)
}
}
익명함수 (Anonymous Function)
: 익명 함수는 이름이 없는 함수를 뜻한다. 람다 함수와 유사하지만, 더 명확한 타입과 리턴을 지정할 수 있다. 익명 함수는 필요할 때 직접 정의하여 사용할 수 있다.
val anonymousFunc = fun(x: Int, y: Int): Int {
return x + y
}
println(anonymousFunc(3, 4)) // 7
람다 함수 (Lambda Function)
: 람다 함수는 익명 함수의 일종으로, 함수의 인라인 표현식이다. 람다 함수는 간결하고 직관적인 구문을 제공하며, 주로 고차 함수의 인자로 사용된다.
// 람다를 만드는 방법 1
val sum1 = fun(x: Int, y: Int): Int {
return x + y
}
// 람다를 만드는 방법 2
val sum2 = { x: Int, y: Int -> x + y }
fun main(){
// 람다를 호출하는 방법 1
println(sum1(3,4))
// 람다를 호출하는 방법 2 (invoke 사용)
println(sum1.invoke(3,4))
// 컬렉션과 함께 사용하는 람다 함수
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }
println(doubled) // [2, 4, 6, 8, 10]
}
콜백 함수 (Callback Function)
: 콜백 함수는 특정 작업이 완료된 후 호출되는 함수이다. 주로 비동기 작업이나 이벤트 처리에서 사용된다. 예를 들어, 네트워크 요청이 완료된 후 결과를 처리하는 함수를 전달할 때 사용된다.
fun main() {
// 둘다 가능
myFunc({
println("함수 호출")
})
println("---------------------")
myFunc(){
println("함수 호출")
}
println("---------------------")
// 인자가 1개라면 () 생략 가능
myFunc{
println("함수 호출")
}
println("---------------------")
}
fun myFunc(callBack : () -> Unit){ // (input) -> return
println("함수 시작")
callBack()
println("함수 끝")
}
고차 함수 (Higher-Order Function)
: 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수이다. 함수가 일급 시민인 코틀린에서 고차 함수는 매우 일반적이다.
// 함수를 인자로 받는 고차 함수
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
// 함수를 반환하는 고차 함수
fun add(a: Int): (Int) -> Int {
return { b -> a + b }
}
val sum = calculate(3, 4, { x, y -> x + y }) // 7
val add5 = add(5)
println(add5(3)) // 8
지역 함수
: 함수안에서 다른 함수를 선언하는 것
fun outerFunction(x: Int, y: Int): Int {
// 지역 함수 정의
fun innerFunction(a: Int, b: Int): Int {
return a + b
}
// 지역 함수 호출
return innerFunction(x, y) * 2
}
scope function
: 일시적인 영역을 형성하는 함수
: 람다를 사용해 일시적인 영역을 만들고 코드를 더 간결하게 만들거나, method chaning에 활용하는 함수를 scope function이라고 한다.
- let: 하나 이상의 함수를 call chain 결과로 호출 할 때 (람다의 결과를 반환 / it 사용)
- run: 객체 초기화와 반환 값의 계산을 동시에 해야 할 때 (람다의 결과를 반환 / this 사용)
- also: 객체 설정을 할 때 객체 수정하는 로직이 call chain 중간에 필요할 때(객체 그 자체 / it 사용)
- apply: 객체 설정을 할 때 객체 수정하는 로직이 call chain 중간에 필요할 때 (객체 그 자체 / this 사용)
- with: 확장 함수가 아님
참고 사이트
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2024. Jay Park All rights reserved.
'Study > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 코루틴 (247) | 2024.07.02 |
---|---|
[Kotlin] 코틀린 클래스 (258) | 2024.07.02 |
[Kotlin] 코틀린 조건문 / 반복문 (2955) | 2024.07.02 |
[Kotlin] 코틀린 리스트/배열 (0) | 2024.07.02 |
[Kotlin] 코틀린 문자열 (0) | 2024.07.02 |