익명함수, 인라인함수, crossinline 키워드
by 볼빵빵오춘기익명함수(Anonymous Function)와 람다식 비교
- 익명함수 : 이름이 없는 함수로, 일반 함수 형식을 띄지만 이름 없이 변수에 할당하여 사용한다.
- 람다식 : 함수형 표현으로, return, continue, break 등을 직접 사용할 수 없다.
- 라벨(Label)을 사용한 반환 처리: @라벨명을 통해 특정 위치로 제어 흐름 이동 가능하다.
val add = fun(x, y) = x + y
val add2 = { x: Int, y: Int -> x + y }
인라인 함수 기본
- 인라인 함수 : 호출되는 위치에 함수 본문을 복사하여 성능 향상시킨다.
- 너무 긴 코드는 인라인화 시 오히려 코드 부피 증가한다.
- noinline 키워드로 비인라인 지정 가능하다.
inline fun shorFunc(x: Int, out: (Int) -> Unit) {
println("함수 호출 전")
out(x)
println("함수 호출 후")
}
인라인 함수와 비지역 반환
- 비지역 반환 (Non-local Return) : 람다식 내 return을 통해 호출한 함수 자체를 종료시킨다.
- 인라인 함수 안에서만 가능하다.
inline fun shortFunc1(x: Int, out: (Int) -> Unit) {
println("함수 호출 전")
out(x) // 여기서 return이 발생하면 이후 코드 실행 안됨
}
crossinline 키워드
- crossinline : 람다식 내 return 사용 금지한다.
- 주로 다른 함수에 람다식을 전달할 때 비지역 반환 방지 용도로 사용된다.
inline fun shortFunc2(x: Int, crossinline out: (Int) -> Unit) {
println("함수 호출 전")
out(x)
println("함수 호출 후")
}
확장 함수 (Extension Function)
- 기존 클래스에 새로운 함수를 추가할 수 있다.
- 멤버 함수와 이름이 같을 경우, 멤버 함수가 우선 호출된다.
fun String.getLongString(target: String): String = if (this.length > target.length) this else target
중위 함수 (Infix Function)
- 멤버 또는 확장 함수이며, 하나의 매개변수만 가진다.
- infix 키워드로 선언하며 객체 함수이름 인자 형식으로 호출 가능하다.
infix fun Int.multiply(x: Int): Int = this * x
println(3 multiply 10)
재귀 함수와 꼬리 재귀
- 재귀 호출 시 무한 루프 방지를 위한 탈출 조건 필요하다.
- tailrec 키워드로 스택 오버플로우 방지 가능하다.(컴파일러가 반복문으로 최적화)
fun factorial(n: Int): Long = if (n == 1) 1 else n * factorial(n - 1)
'👩🏻💻 About 프로그래밍 > Kotlin' 카테고리의 다른 글
함수형 프로그래밍, 객체지향프로그래밍, 람다식, 일급 객체, 고차 함수, 함수 참조 (0) | 2025.06.09 |
---|---|
Kotlin Basic - 함수 (1) | 2025.06.09 |
Kotlin Basic - 연산자 종류 (0) | 2025.06.08 |
Kotlin Basic - 스마트 캐스트(Smart Cast), Number형, is 연산자, as 연산자 (1) | 2025.06.08 |
Kotlin Basic - typealias, !!, :?, ?. (0) | 2025.06.08 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기