1. Arrays
길게 설명하지 않겠다. 배열은 배열이다! 칸수가 정해져 있고, 타입도 정해져있는 그냥 순수 배열이다. 코틀린이라고 다르지 않다. 자세한 용법은 링크안의 공식 문서가 더 명확하다.
다만, 공식 문서에서도 하드웨어 사양등의 특별한 제약만 없다면 Collection을 쓸 것을 강조하는데, 이것이 바로 오늘의 메인 주제이다.
2. Collection
벌써부터 머리가 어지럽다.. 공식 문서를 차근차근 하나씩 따라가보자.
3. var ? val ?
공식문서에 따르면, 모든 collection들은 가급적 val 로 선언되어야 한다! val로 선언된다고 해서, 콜렌션 내부의 요소를 바꿀 수 없는것이 아니라, 콜렉션의 재할당이 금지될뿐이다. 아래는 공식문서의 예시이다.
요약하자면 콜렉션을 var로 선언할 경우, 어느순간 전혀 다른 내용으로 컬렉션이 바뀌어버리는 불상사가 일어날 수 있다.
4. Collection으로부터 파생된 여러 Class들
시작하기 전에 몇 가지만 짚고 넘어가자.
- 각 자료형의 특장점만 소개하고 넘어갈 것이다!
- 공식 도큐의 모든 내용을 여기에 따라 쓰지는 않을 것이므로, 자세한 용법은 공식 도큐를 참조하길 바란다.
- 지금부터 소개할 자료형들은 Read-Only & Mutable 로 나뉜다. (ArrayDeque 제외)
- Write가 가능한 Collection으로 바꾸고 싶다면 각 자료형의 앞에 Mutable을 붙이면된다.
ex) MutableCollection, MutableList, MutableSet, MutableMap
4-1. Collection
콜렉션은 List 와 Set의 부모 클래스로, 콜렉션 그 자체로도 사용이 가능하다.
순서 | x |
인덱스 | x |
중복 | o |
4-2. List
Collection에 순서와 인덱스가 추가된 버전이다. 배열과 달리 미리 정해진 사이즈가 없고, 코틀린에서는 List가 기본적으로 ArrayList를 참조한다.
순서 | o |
인덱스 | o |
중복 | o |
4-3. Set
List와 다르게 중복을 허용하지 않는다. 인덱스도 없다. 그렇다고 순서가 없는건 아니니 주의하자! 코틀린에서는 Set이 기본적으로 LinkedHashSet를 참조한다. 대체품으로 HashSet이 있고, HashSet 은 순서가 없다는 차이가 있지만 더욱 적은 메모리를 사용한다고 하니 기회가 되면 사용해보자.
순서 | o |
인덱스 | x |
중복 | x |
4-4. Map
Map 은 Collection 인터페이스를 상속받지는 않지만, Collection 타입이다. (? 이름이라도 바꾸시던가요) 파이썬을 아는 사람이라면 파이썬의 딕셔너리를 떠올리면 된다. <Key, Value> 쌍이 하나의 요소로써, <키, 값>들의 모음으로 이루어져 있고, Key의 중복은 허용하지 않는다.
순서 | x |
인덱스 | x |
키 중복 | x |
값 중복 | o |
한가지 독특한 것이 순서가 없기때문에, "두 Map이 같은가? 를 비교할때 들어있는 요소들만 완벽히 동일하다며 같은 Map으로 판별한다. 또한 아주아주 독특한 것이, 요소를 순회할때는 순서가 필요하기 때문에 LinkedHashSet를 참조한다. LinkedHashSet 엄연히 순서가 존재하는 것으로, HashSet 과는 다르다!
4-.5 ArrayDeque
ArrayDeque는 별거없다. 그냥 자료구조 Deque와 동일하다.인덱싱도 잘 작동한다. 공식 도큐에서는 해당 Class로 Stack과 Queue를 모두 사용할 수 있다고 소개하고 있다. (짬처리) 혹시! Deque를 모르는 거라면 직접 (스파르타 코딩클럽 이순용을) 찾아보도록 하자.
순서 | o |
인덱스 | o |
중복 | o |
'코틀린 언어' 카테고리의 다른 글
[Kotlin] Singleton 디자인 패턴 토막글 (왜 static 이 아닌 object 인가?) (2) | 2024.05.21 |
---|---|
[Kotlin] Property 토막글 (Spring boot Setter에 관한 고찰) (0) | 2024.05.17 |
[Kotlin] Any 타입과 MutableList (0) | 2024.04.24 |