안녕하세요
K-IN 입니다.
코틀린에 대해서 알아보겠습니다.
전체 강의 목록은 아래의 링크를 클릭해주세요.
K000. 코틀린 시리즈 (연재물)
안녕하세요 K-IN 입니다. 요즘 코틀린을 이용한 개발 프로젝트가 늘어나고 있습니다. 이에, 코틀린에 대해서 상세하게 정리하는 간행물을 제작하고자 합니다. 여기에 있는 링크들은 모두 코틀린
k-in.tistory.com
코틀린 함수(Functions)
코틀린에서 함수에 대해서 이해하려면 아래의 개념들을 숙지해야합니다. "☆" 표기는 중요도를 나타냅니다.
분량이 많아 이글에서는 12번 항목까지만 다룹니다.
이전 내용 코틀린 함수를 자세히 배우려면 아래의 링크들을 참고해주세요.
- 2024.02.08 - [프로그래밍/코틀린] - K013. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트4
- 2024.02.06 - [프로그래밍/코틀린] - K012. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트3
- 2024.02.06 - [프로그래밍/코틀린] - K011. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트2
- 2024.02.05 - [프로그래밍/코틀린] - K010. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트1
- 기본적인 함수 구조 ☆
- 함수 사용 방법 ☆
- 기본 인자(Default Arguments) ☆☆
- 이름지정 인자(Named Arguments) ☆☆
- 단일 표현식 함수(Single-expression Functions) ☆☆☆
- 명시적 리턴 타입(Explicit Return Types)
- 가변인자 (varargs) ☆☆☆
- 중위 표기법 (Infix Notation) ☆☆☆
- 함수의 범위 (Function Scope) ☆☆☆
- 제너릭 함수 (Generic Functions) ☆☆☆
- 꼬리 재귀 함수 (Tail Recursive Functions) ☆☆
- 람다 (Lambdas) ☆☆☆
- 인라인 함수 (Inline Functions) ☆☆☆
- 연산자 오버로딩 (Operator overloading)
- 빌더 (Builders)
고차 함수와 람다 (Higher-Order Functions and Lambdas)
코틀린은 함수를 first-class 로 취급합니다.
즉, 함수가 변수 혹은 데이터 구조내에 저장되고 인자로 전달이 가능하며 고차 함수로부터 리턴되는 특성을 만족합니다.
first-class 개념에 대해 쉽게 이해하고자 한다면 아래의 글을 참조해주세요.
2024.02.15 - [프로그래밍] - 컴퓨터 과학, First Class Functions/Citizens/Objects 의 개념
컴퓨터 과학, First Class Functions/Citizens/Objects 의 개념
안녕하세요 K-IN 입니다. 프로그래밍 언어를 배우다보면 컴퓨터 과학(Computer Science)에서 사용되는 용어들이 나오는 경우가 있습니다. 예를 들어, 아래와 같은 단어들이 주로 보입니다. First Class Fun
k-in.tistory.com
다시 본론으로 돌아와서, 코틀린은 이러한 특성을 잘 제공하기 위해 람다 표현식(lambda expressions)와 같은 특수한 언어 구조를 제공합니다.
그렇다면 앞서 언급한 고차함수(Higher-order functions)란 무엇일까요?
고차함수란 다른 함수를 매겨변수로 받거나 함수를 반환하는 함수를 의미합니다.
코틀린에서는 고차함수를 아래와 같은 형태로 정의할 수 있습니다.
fun <T, R> Collection<T>.fold(
initial: R,
combine: (acc: R, nextElement: T) -> R
): R {
var accumulator: R = initial
for (element: T in this) {
accumulator = combine(accumulator, element)
}
return accumulator
}
위 예제는 제너릭 컬렉션에 대한 확장함수인 fold 를 구현한 예제이며
고차함수와 람다식을 결합하면 컬렉션 요소들에 대해 다양한 연산들을 적용할 수 있습니다.
파이썬 언어에서는 map 과 같은 역할을 수행합니다.
fold 확장함수를 사용하는 예시들을 통해 람다 식을 통해서 다양한 연산을 수행하는 예시를 만들어 낼 수 있습니다.
- 컬렉션 요소들에 대한 누적합을 계산
- 컬렉션 요소들을 문자열 Join 연산
- 컬렉션 요소들에 대한 누적곱을 계산
val items = listOf(1, 2, 3, 4, 5)
println("------- 누적합(Cumulative sum) 연산 -------")
items.fold(0, { acc: Int, i: Int ->
print("acc = $acc, i = $i, ")
val result = acc + i
println("result = $result")
result
})
println("------- 문자열 join -------")
val joinedToString = items.fold("Elements:", { acc, i -> acc + " " + i })
println(joinedToString)
println("------- Int::times 연산 -------")
// val product = items.fold(1, Int::times)
// 위 코드를 풀어내면 아래와 같습니다.
val product = items.fold(1, { acc, i ->
print("acc = $acc, i = $i, ")
val result = acc.times(i)
println("result = $result")
result
})
println(product)
이상입니다.
K-IN 올림.
'프로그래밍 > 코틀린' 카테고리의 다른 글
K016. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트7, 람다(Lambdas) 2 (85) | 2024.03.05 |
---|---|
K015. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트6, 람다(Lambdas) 1 (109) | 2024.02.16 |
K013. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트4 (8) | 2024.02.08 |
K012. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트3 (6) | 2024.02.06 |
K011. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트2 (0) | 2024.02.06 |