개요
필자는 Java에서 Collection이라는 개념을 들어보기만 했지 자세하게 공부는 안해봤다. 대표적인 List, Map도 사용은 해봤지 자세한 용도와 개념은 모르고 사용했었다. 이번 기회를 통해 다시 처음부터 공부하고자 이 글을 쓴다.
Collection
Collection은 자료구조를 편하게 다루기 위한 라이브러리이다.
자, 여기서 자료구조란 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것으로 한마디로 데이터들의 모임이라고 정리할 수 있다.
즉, Collection은 데이터 값의 모임을 잘 정리한 라이브러리이다.
Kotlin에서는 Mutable(가변성)과 Immutable(불변성)로 나누어지고 List, Set, Map 등이 있다. 오늘은 이 3가지에 대해서 알아보고자 한다.
1. List
List는 순서가 있는 데이터들의 집합이다.
// Immutable
val 리스트명: List<자료형> = listOf(값1, 값2, 값3)
// Mutable
val 리스트명: MutableList<자료형> = mutableListOf(값1, 값2, 값3)
자료형은 타입 추론으로 굳이 선언하지 않아도 된다.
Immutable
내용 수정이 안되며 읽기 전용 List이다.
Mutable
읽기, 수정 다 되는 List이다.
* ArrayList
ArrayList는 변경 가능한 가변성이며 배열의 크기를 지정할 수 있다.
관련 함수
위 코드에서 사용된 List 관련 함수들을 살펴보자.
ImmutableList
- [index] : 인덱스(index)를 통해 해당 원소를 추출
- get(index) : 인덱스(index)를 통해 해당 원소를 추출
- indexOf(value) : 해당 원소의 index를 추출
- contains(value) : 해당 원소가 해당 리스트에 있는지 확인
MutableList
- size : 해당 리스트에 길이를 반환
- add(index, value) : 해당 인덱스(index)에 값을 추가하는데 기존에 있던 값은 사라진다.
- add(value) : 리스트 끝에 값을 추가
- set(index, value) : 해당 인덱스(index)에 값을 추가
- remove(value) : 위 코드에 설명이 잘못되었다. 해당 인덱스에 있는 값을 삭제하는게 아니라 값을 인자로 받으면 값을 삭제해주는 것이다
MutableList는 ImmutableList 관련 함수도 포함한다. ImmutableList는 읽기 전용이기 때문에 MutableList에서 지원하는 함수는 막혀있다.
2. Set
Set은 순서가 없는 유일한 요소의 집합이다. 중복이 있으면 하나의 값으로 나타내어 준다.
// Immutable
val 변수명: Set<자료형> = setOf(값1, 값2, 값3)
// Mutable
val 변수명: MutableSet<자료형> = mutableSetOf(값1, 값2, 값3, 값4)
자료형은 타입 추론으로 선언하지 않아도 된다.
Immutable
읽기 전용이며 내용 수정은 안된다.
Mutable
변경, 읽기 둘 다 된다.
관련 함수
Set은 인덱스(index)가 없어 인덱스(index)를 통해 값에 접근이 불가능하다. 하지만 반복문으로 순회하면 값을 얻을 수 있다. (방법은 다 있는 법!)
- add(value) : Set 끝에 값을 저장
- remove(value) : 해당 값을 삭제
3. Map
Map은 키-값 쌍의 집합이며 JSON하고 유사하다. 서버에서 클라이언트로 정보를 보낼 때 사용하면 좋겠다.
각 키는 유일해야 하며 하나의 값 가져야한다.
// Immutable
val 변수명: MutableMap<키 자료형, 값 자료형> = mutableMapOf(Key1 to Value1, Key2 to Value2)
// Mutable
val 변수명: MutableMap<키 자료형, 값 자료형> = mutableMapOf(Key1 to Value1, Key2 to Value2)
마찬가지로 자료형 생략 가능하다.
Immutable
읽기 전용이며 내용 변경이 불가능하다.
Mutable
변경, 읽기 둘 다 된다.
관련 함수
- [key] : 해당 값에 맞는 Key를 입력하고 그 Key에 대한 값을 추출
- keys : 해당 Map에 Key들을 나열한다. Key들만 조회할 때 사용
- values : 해당 Map에 Value들만 나열해 조회
- getValue(key) : Key를 받고 해당 Key에 맞는 값을 추출
- put(key, value) : Map 끝에 해당 Key로된 값을 넣겠다는 의미
- remove(key) : Key에 맞는 값을 삭제하고 true/false로 반환한다.
컬렉션(Collection) 관련 함수
대표적으로 컬렉션 관련 함수로는 filter, map, forEach, any, all 등이 있다.
1. filter
특정 조건에 만족하는 요소만 뽑아 컬렉션으로 만들어서 반환한다.
2. map
각 요소에 특정 수식을 적용한 결과로만 컬렉션을 만들어 반환한다.
3. forEach
특정 작업 수행 (forEach는 반복문 파트에서 했으니까..)
4. any
특정 수식에 대해서 하나라도 만족 시 true를 반환한다.
5. all
특정 수식에 대해서 모두 조건에 부합해야 true를 반환한다.
참고 자료
Java에서는 간단히 선언했던 List가 Kotlin에서는 좀 다양해서 처음엔 당황했었다. 이것도 적응에 문제겠지..
직접 만들어보거나 체험해보는게 공부가 더 잘되는 것 같다. 컬렉션에 대해서 알지 못했던 것들이 많이 보여서 당황을 좀 했는데 그래도 많은 기능들을 지원하고 몰랐던 것들을 내 머리속에 채우니까 뿌듯했다.
잘못된 부분이나 부족한 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 함수(Function), 람다(lambda) (4) | 2024.12.02 |
---|---|
[Kotlin] JVM, Kotlin 컴파일 과정 (2) | 2024.12.02 |
[Kotlin] 제어문(2) - 반복문(while, for) (1) | 2024.11.15 |
[Kotlin] 배열(Array) (0) | 2024.11.14 |
[Kotlin] 제어문(1) - 조건문(when, if-else) (0) | 2024.11.14 |