원문 : [MEDIUM] Kotlin library useful functions
유지 보수가 용이하며 가독성이 높은 코드를 작성할 때 유용한 Kotlin 라이브러리의 몇 가지 함수의 예제를 설명합니다.
먼저 아래와 같이 Shape 데이터 클래스를 선언합니다.
1 2 3 |
data class Shape(val id: Int, val name: String) val listOfShape = listOf(Shape(1,"Triangle"), Shape(2,"Circle"), Shape(3, "Square"), Shape(4,"Rectangle")) |
indexOfFirst
주어진 조건에 맞는 리스트, 세트 또는 맵의 첫 번째 요소의 인덱스를 반환하며, 그런 요소가 없으면 -1을 반환합니다.
1 2 3 4 |
val shapeName = "Square" val indexOfElement: Int = listOfShape.indexOfFirst { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
이 예제에서, shape의 이름이 “Square”와 같으면 첫 번째 요소의 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
find
주어진 조건에 맞는 리스트, 세트 또는 맵의 첫 번째 요소(객체)를 반환하며, 그런 요소가 없으면 null을 반환합니다.
1 2 3 4 |
val shapeName = "Square" val shape: Shape? = listOfShape.find { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
이 예제에서, shape의 이름이 “Square”와 같으면 그 Shape 객체를 반환하고, 그렇지 않으면 null을 반환합니다.
any
리스트, 세트 또는 맵에 주어진 조건에 맞는 요소가 하나라도 있으면 true를 반환합니다.
1 2 3 4 |
val shapeName = "Square" val hasSquareElement: Boolean = listOfShape.any { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
이 예제에서, shape의 이름이 “Square”와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
출력: hasSquareElement = true
listOfShape에 “Square” shape이 있기 때문입니다.
none
리스트, 세트 또는 맵의 요소 중 주어진 조건에 맞는 요소가 하나도 없으면 true를 반환합니다.
1 2 3 4 |
val shapeName = "Square" val isNotSquare: Boolean = listOfShape.none { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
이 예제에서, 모든 shape의 이름이 “Square”와 같지 않으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
출력: isNotSquare = false
listOfShape에 “Square” shape이 하나 있기 때문입니다.
all
리스트, 세트 또는 맵의 모든 요소가 주어진 조건에 맞으면 true를 반환합니다.
1 2 3 4 |
val shapeName = "Square" val hasSameName: Boolean = listOfShape.all { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
이 예제에서, 모든 shape의 이름이 “Square”와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
출력: hasSameName = false
모든 요소의 이름이 “Square”가 아니기 때문입니다.
count
컬렉션의 요소 수를 반환합니다.
1 |
val totalElement: Int = listOfShape.count() |
출력: totalElement = 4
listOfShape에 총 4개의 요소가 있기 때문입니다.
또한, 주어진 조건에 맞는 요소의 수를 반환합니다.
1 2 3 4 |
val shapeName = "Square" val totalSquareElement: Int = listOfShape.count { it.name == shapeName // 조건: shape의 이름이 "Square"인지 확인 } |
출력: totalSquareElement = 1
listOfShape에 “Square” shape이 하나 있기 때문입니다.
fold
초기 값을 시작으로 왼쪽에서 오른쪽으로 현재 누적 값과 각 요소에 대해 주어진 연산을 적용하여 값을 누적합니다.
1 2 3 4 5 |
val numbers = listOf(1, 2, 3, 4, 5) val sum = numbers.fold(0) { acc, element -> acc + element } println("Sum of numbers: $sum") |
출력: Sum of numbers: 15
foldIndexed
fold와 유사하지만, 추가적으로 인덱스 매개변수를 제공합니다.
1 2 3 4 5 |
val words = listOf("apple", "banana", "cherry") val result = words.foldIndexed("") { index, acc, element -> acc + "[$index: $element] " } println("Result: $result") |
출력: Result: [0: apple] [1: banana] [2: cherry]
slice
지정된 인덱스를 기반으로 컬렉션에서 부분 리스트를 추출합니다.
1 2 3 |
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9) val result = numbers.slice(listOf(2, 4, 6)) println("Result: $result") |
출력: Result: [3, 5, 7]
핵심 요약 및 용어 정리
- indexOfFirst: 조건에 맞는 첫 번째 요소의 인덱스를 반환하며, 없으면 -1을 반환합니다.
- find: 조건에 맞는 첫 번째 요소를 반환하며, 없으면 null을 반환합니다.
- any: 조건에 맞는 요소가 하나라도 있으면 true를 반환합니다.
- none: 조건에 맞는 요소가 하나도 없으면 true를 반환합니다.
- all: 모든 요소가 조건에 맞으면 true를 반환합니다.
- count: 요소의 총 개수 또는 조건에 맞는 요소의 개수를 반환합니다.
- fold: 초기 값을 시작으로 요소에 대해 연산을 적용하여 누적 값을 계산합니다.
- foldIndexed: fold와 유사하지만, 인덱스를 추가로 제공합니다.
- slice: 지정된 인덱스를 기반으로 부분 리스트를 추출합니다.