Kotlin 함수
Kotlin에서 함수는 프로그램의 기본 구성 요소입니다. 이 가이드에서는 Kotlin 함수의 다양한 측면을 상세히 살펴보겠습니다.
함수 기본 (Function Basics)
Kotlin에서 함수는 fun
키워드를 사용하여 선언합니다:
fun double(x: Int): Int {
return 2 * x
}
함수를 호출할 때는 일반적인 방식을 사용합니다:
val result = double(2)
멤버 함수를 호출할 때는 점 표기법을 사용합니다:
Stream().read() // Stream 클래스의 인스턴스를 생성하고 read() 메서드 호출
매개변수 (Parameters)
함수 매개변수는 Pascal 표기법(name: type)을 사용하여 정의합니다:
fun powerOf(number: Int, exponent: Int): Int { /*...*/ }
매개변수 선언 시 후행 쉼표를 사용할 수 있습니다:
fun powerOf(
number: Int,
exponent: Int, // 후행 쉼표
) { /*...*/ }
기본 인자 (Default Arguments)
함수 매개변수는 기본값을 가질 수 있습니다:
fun read(
b: ByteArray,
off: Int = 0,
len: Int = b.size,
) { /*...*/ }
이는 오버로딩의 필요성을 줄여줍니다.
명명된 인자 (Named Arguments)
함수를 호출할 때 하나 이상의 인자에 이름을 지정할 수 있습니다:
fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
) { /*...*/ }
reformat("This is a long String!")
reformat("This is a short String!", upperCaseFirstLetter = false, wordSeparator = '_')
이는 특히 많은 매개변수를 가진 함수를 호출할 때 유용합니다.
Unit을 반환하는 함수 (Unit-returning Functions)
유용한 값을 반환하지 않는 함수의 반환 타입은 Unit
입니다:
fun printHello(name: String?): Unit {
if (name != null)
println("Hello $name")
else
println("Hi there!")
// `return Unit` 또는 `return`은 선택사항입니다
}
Unit
반환 타입 선언은 생략할 수 있습니다.
단일 표현식 함수 (Single-expression Functions)
함수 본문이 단일 표현식으로 구성된 경우, 중괄호를 생략하고 =
기호 뒤에 본문을 지정할 수 있습니다:
fun double(x: Int): Int = x * 2
컴파일러가 반환 타입을 추론할 수 있는 경우 반환 타입 선언도 생략할 수 있습니다:
fun double(x: Int) = x * 2
가변 인자 (Varargs)
함수의 매개변수(주로 마지막 매개변수)를 vararg
수식어로 표시할 수 있습니다:
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts는 배열입니다
result.add(t)
return result
}
val list = asList(1, 2, 3)
이미 배열이 있는 경우 스프레드 연산자(*
)를 사용하여 함수에 전달할 수 있습니다:
val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4)
중위 표기법 (Infix Notation)
infix
키워드로 표시된 함수는 중위 표기법을 사용하여 호출할 수 있습니다:
infix fun Int.shl(x: Int): Int { ... }
// 중위 표기법을 사용한 함수 호출
1 shl 2
// 다음과 동일합니다
1.shl(2)
함수 스코프 (Function Scope)
Kotlin 함수는 파일의 최상위 레벨, 로컬 함수, 멤버 함수, 확장 함수로 선언될 수 있습니다.
로컬 함수 (Local Functions)
Kotlin은 함수 내부에 함수를 선언할 수 있는 로컬 함수를 지원합니다:
fun dfs(graph: Graph) {
fun dfs(current: Vertex, visited: MutableSet<Vertex>) {
if (!visited.add(current)) return
for (v in current.neighbors)
dfs(v, visited)
}
dfs(graph.vertices[0], HashSet())
}
제네릭 함수 (Generic Functions)
함수는 제네릭 매개변수를 가질 수 있습니다:
fun <T> singletonList(item: T): List<T> { /*...*/ }
꼬리 재귀 함수 (Tail Recursive Functions)
Kotlin은 꼬리 재귀라고 알려진 함수형 프로그래밍 스타일을 지원합니다:
val eps = 1E-10 // "충분히 작은" 값, 10^-15일 수도 있습니다
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (Math.abs(x - Math.cos(x)) < eps) x else findFixPoint(Math.cos(x))
tailrec
수식어를 사용하면 컴파일러가 재귀를 최적화하여 빠르고 효율적인 루프 기반 버전으로 변환합니다.
Kotlin의 함수는 다양한 기능과 유연성을 제공합니다. 기본 인자, 명명된 인자, 단일 표현식 함수 등의 기능은 코드를 더 간결하고 읽기 쉽게 만들어줍니다. 가변 인자, 중위 표기법, 로컬 함수 등의 고급 기능은 더 표현력 있는 코드를 작성할 수 있게 해줍니다. 제네릭 함수와 꼬리 재귀 최적화는 성능과 타입 안전성을 모두 고려한 강력한 도구입니다.
이러한 다양한 기능을 적절히 활용하면, 더 안전하고, 읽기 쉽고, 유지보수가 용이한 코드를 작성할 수 있습니다. 특히 함수형 프로그래밍 패러다임을 따르는 프로젝트에서 Kotlin의 함수 기능은 큰 강점을 발휘합니다.
Kotlin, 함수, 매개변수, 기본인자, 명명된인자, 단일표현식함수, 가변인자, 중위표기법, 로컬함수, 제네릭함수, 꼬리재귀, 함수형프로그래밍, 코틀린문법, 안드로이드개발, 서버개발
'개발&프로그래밍' 카테고리의 다른 글
[kotlin] 인라인 함수 (Inline Functions) (0) | 2024.08.19 |
---|---|
[kotlin] 고차 함수와 람다 (Higher-order Functions and Lambdas) (0) | 2024.08.18 |
[Kotlin] 타입 별칭(Type Aliases) (0) | 2024.08.18 |
[Kotlin] 위임된 프로퍼티(Delegated Properties) (0) | 2024.08.17 |
[Kotlin] 위임(Delegation) (0) | 2024.08.17 |
댓글