본문 바로가기
Kotlin

[Kotlin 강의] 함수 표현식 총정리 fun, lambda

by 뷰티풀스택 2025. 1. 22.
반응형

코틀린 함수 표현식 총정리

1. fun 표준 사용법

가장 기본적인 방법으로써, fun 키워드로 시작하고 ( ) 괄호안에 매개변수를 넣어주고 { } 중괄호내에서 로직을 구현후 return 으로 결과를 전달하면 된다.

Naming

  • 소문자로 시작
  • _, - 등과 같이 중간에 연결없이 대문자로 구분하는 Camel style (ex. calcDolla) 로 작성

Return

  • 함수내에서 return 생략 가능
  • 모든 타입을 반환 가능
  • exit 으로 활용 가능
fun sum(x: Int, y: Int): Int {
    return x + y
}


fun main() {
    println("10 + 20 = ${sum(10, 20)}")
}

--
10 + 20 = 30

 

Default value

fun printMsg(name: String, message: String, city: String = "서울") {
    println("$name: $message (장소: $city)")
}

fun main() {
    printMsg("유재석", "유퀴즈 진행")
}

--
유재석: 유퀴즈 진행 (장소: 서울)

참고로, printMsg 함수에서 return 이 없었다. return은 생략이 가능하다.

 

2. fun 한 줄 사용법

{ } 안에 로직이 한 줄로 표현되고 그 결과가 바로 return 값이 된다면 생략이 가능하다. 이 경우에는 코틀린 자체적으로 Type Inference가 수행되기 때문에 Return Type도 생략이 가능하다. 즉, 모든 것이 한줄로 명확할때 사용하면 편리하다.

  • { } 대신 = 사용
  • return 생략
  • return type 생략
fun multiply(x: Int, y: Int) = x*y

fun main() {
    println("10 * 20 = ${multiply(10, 20)}")
}

---
10 * 20 = 200

 

3. Lambda 표현식

람다 표현식은 최대한 불필요한 표현들을 생략하고 하나의 변수처럼 간편히 사용할 수 있어서 매우 편리하다. 단, 가독성이 떨어지기 때문에 fun 한 줄 표현식과 적절히 섞어서 사용하면 좋을 것 같다.

  • fun 표현 대신 { } 사용
  • 람다를 받아줄 변수를 선언해야 한다.
  • 입력과 return 사이는 -> 화살표로 표현
  • 입력 변수가 없을때에는 -> 도 생략하고 { } 안에 로직 한줄만 작성할 수 있다.
val divide = { x: Int, y: Int -> x / y }

fun main() {
    println("20 / 10 = ${divide(20, 10)}")
}

--
20 / 10 = 2
val welcome = { println("Welcome to Kotlin!")}

fun main() {
    welcome()
}

--
Welcome to Kotlin!

 

4. 다른 함수에 입력값으로 전달할 수 있는 Lambda 표현식

람다는 하나의 변수처럼 사용될 수 있다고 위에서 설명하였다. 그러므로, 다른 함수에 입력 변수로도 사용될 수 있다.
특히, filter 와 map 에서 매우 유용한 방식이다.

Filter 에서 사용법

val studentScores = (10..100 step 5).toList()
val gradeA = studentScores.filter({x -> x >= 90})
val gradeB = studentScores.filter({x -> x >= 70 && x < 90})
println(studentScores)
println("Grade A is $gradeA")
println("Grade B is $gradeB")

--
[10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
Grade A is [90, 95, 100]
Grade B is [70, 75, 80, 85]

 

참고로, 함수에 입력할때 ( )를 생략해도 되어 편리하다. " trailing lambda"라고 부른다.

val gradeA = studentScores.filter {x -> x >= 90}
val gradeB = studentScores.filter {x -> x >= 70 && x < 90}

 

Map 에서 사용법

Map은 내부 item 값들을 공통된 규칙으로 업데이트 할 때 유용하며, 람다 함수와 함께 쓰면 매우 편리하다.

val moneyThousandUnit = (1..9).toList()
val moneyUnit = moneyThousandUnit.map {x -> x * 1000 }
println(moneyThousandUnit)
println(moneyUnit)

--
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000]

 

반응형

댓글