티스토리 뷰

이번에는 코틀린에서 컬렉션을 다루는 방법에 대해 알아보자!
1. List
2. Set
3. Map
List
List는 순서가 있고, 요소간의 중복을 허용하는 자료구조이다.
Java
public static void main(String[] args) {
final List<Integer> numbers = Arrays.asList(100, 200);
// 요소 하나를 가져온다.
Integer integer = numbers.get(0);
// foreach
for (int number : numbers) {
System.out.println(number);
}
// 전통적인 for문
for (int i = 0; i < numbers.size(); i++) {
System.out.printf("%s %s", i, numbers.get(i));
}
}
Kotlin
fun main() {
val immutableNumbers = listOf(100, 200) // 불변 list -> add, remove X
val mutableNumbers = mutableListOf(100, 200) // 가변 list -> add, remove O
mutableNumbers.add(300)
mutableNumbers.remove(300)
// 요소 하나를 가져온다.
// numbers.get(0)과 같다.
val integer = immutableNumbers[0]
// foreach
for (number in immutableNumbers) {
println(number)
}
// 전통적인 for문
// withIndex : 인덱스와 값을 가져온다.
for ((idx, value) in immutableNumbers.withIndex()) {
println("$idx, $value")
}
}
코틀린에서 가변 리스트를 만들고 싶으면 mutableListOf()
, 불변 리스트를 만들고 싶다면 listOf()
를 사용하자. 깔끔한 코드와 불필요한 가변 리스트 사용을 줄이기 위해서 우선 불변 리스트로 만들고, 필요한 경우에 가변 리스트로 변경하길 권장한다.
참고로 불변이라 하더라도 Reference Type
인 Element
의 필드는 변경할 수 있다.
Set
Set은 순서가 없고, 요소간의 중복을 허용하지 않는 자료구조이다. 자료구조적 의미를 제외하고는 모든 기능이 List와 비슷하다.
fun main() {
val immutableNumbers = setOf(100, 200) // 불변 set -> add, remove X
val mutableNumbers = mutableSetOf(100, 200) // 가변 set -> add, remove O
mutableNumbers.add(300)
mutableNumbers.remove(300)
// foreach
for (number in immutableNumbers) {
println(number)
}
// 전통적인 for문
// withIndex : 인덱스와 값을 가져온다.
for ((idx, value) in immutableNumbers.withIndex()) {
println("$idx, $value")
}
}
Map
Map은 순서가 없고, Key에 대한 중복을 허용하지 않지만, Value는 중복이 가능한 자료구조이다.
Java
public static void main(String[] args) {
// JDK 8까지
HashMap<Object, Object> oldMap = new HashMap<>();
oldMap.put(1, "MONDAY");
oldMap.put(2, "TUESDAY");
// JDK 9 이후
Map<Integer, String> newMap = Map.of(1, "MONDAY", 2, "TUESDAY");
}
Kotlin
fun main() {
val oldMap = mutableMapOf<Int, String>() // <Int, String> 타입 명시
oldMap[1] = "MONDAY" // oldMap.put(1, "MONDAY");
oldMap[2] = "TUESDAY" // oldMap.put(2, "TUESDAY");
mapOf(1 to "MONDAY", 2 to "TUESDAY") // to : 중위호출
}
코틀린도 자바와 동일하게 MutableMap
을 만들어 넣을 수도 있고, 정적 팩토리 메소드(mapOf()
)를 바로 활용할 수도 있다.
다만, mutableMap
의 경우 타입을 추론할 수 없기 때문에 타입을 명시해주어야한다.
정리
Kotlin
에서는 컬렉션을 생성할 때, 불변/가변을 지정해주어야 한다.Java
와 비교했을 때,List
,Set
,Map
에 대한 사용법이 변경, 확장되었다.Java
와Kotlin
코드를 섞어 컬렉션을 사용할 때에는 주의해야 한다.Java
에서Kotlin
컬렉션을 가져갈 때는 불변 컬렉션을 수정할 수도 있고,non-nullable
컬렉션에null
을 넣을 수도 있다.Kotlin
에서Java
컬렉션을 가져갈 때는 플랫폼타입을 주의해야 한다.
'Kotlin' 카테고리의 다른 글
[Kotlin] scope function (0) | 2022.06.28 |
---|---|
[Kotlin] 람다(lambda) (0) | 2022.06.22 |
[Kotlin] 클래스 (0) | 2022.06.17 |
[Kotlin] object 키워드 (0) | 2022.06.14 |
[Kotlin] 접근 제한자(Visibility Modifier) (0) | 2022.06.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코틀린
- 데이터베이스
- 노마드코더
- 스프링
- webflux
- 노마드
- 알고리즘
- 스프링부트
- 그리디
- spring boot
- 인프런
- Spring
- 구현
- MySQL
- Real MySQL
- 자료구조
- leetcode
- Algorithm
- 릿코드
- 정렬
- 백준
- 북클럽
- 김영한
- 스프링 부트
- kotlin
- 리팩토링
- 파이썬
- mysql 8.0
- 코테
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함