0과 1을 공부하다.

[Kotlin] 코틀린 함수 본문

Study/Kotlin

[Kotlin] 코틀린 함수

Developer_Jay 2024. 7. 2. 23:13
728x90

코틀린에서 사용하는 함수(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.

728x90

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

[Kotlin] 코틀린 코루틴  (0) 2024.07.02
[Kotlin] 코틀린 클래스  (0) 2024.07.02
[Kotlin] 코틀린 조건문 / 반복문  (0) 2024.07.02
[Kotlin] 코틀린 리스트/배열  (0) 2024.07.02
[Kotlin] 코틀린 문자열  (0) 2024.07.02
Comments