티스토리 뷰

728x90

 


컬렉션

• 컬렉션이란 코틀린 표준 라이브러리에서 제공하는 도구로써, 여러 요소들을 담을 수 있는 자료구조이다.

• 배열과 다르게 초기화시 크기를 미리 정해놓을 필요도 없고, 크기가 고정되어 있지 않음.

 

1. 변경 가능 여부

• 변경이 가능하면 Mutable, 불가능하면 Immutable로 나눌 수 있다.

• 컬렉션 요소의 변경이 필요한 상황이 아니라면 기본적으로 Immutable을 사용하는 것이 좋다.

     - 많은 코드 진행 후에도 해당 컬렉션이 바뀌었는지 안 바뀌었는지 추적할 필요 없이 믿고 사용할 수 있기 때문.

 

2. List

• 인덱스로 접근 가능하고, 순서가 있는 자료 구조.

• immutable

     - listOf<자료형>(값1, 값2, ...)

• mutable

     - mutableListOf<자료형>(값1, 값2, ...)

val IMMU_LIST = listOf<Int>(1, 1, 5, 2)
val MU_LIST = mutableListOf<Int>(4, 7, 6)
IMMU_LIST[0] = 3 // 오류 발생 : Immutable은 변경 불가.
MU_LIST[0] = 6 // mutable은 변경 가능
println(IMMU_LIST) // [1, 1, 5, 2] 출력
println(MU_LIST) // [6, 7, 6] 출력
// List의 메소드
println(IMMU_LIST[0]) // 1 출력 : IMMU_LIST의 0번 요소
println(IMMU_LIST.get(1)) // 1 출력 : IMMU_LIST의 1번 요소
println(IMMU_LIST.indexOf(2)) // 3 출력 : IMMU_LIST의 요소 2의 인덱스
println(IMMU_LIST.last()) // 2 출력 : IMMU_LIST의 마지막 요소
println(IMMU_LIST.first()) // 1 출력 : IMMU_LIST의 첫번째 요소

MU_LIST.add(50) // MU_LIST의 마지막에 50 추가
println(MU_LIST) // [6, 7, 6, 50] 출력
MU_LIST.removeAt(0) // MU_LIST의 0번 요소 삭제
println(MU_LIST) // [7, 6, 50] 출력
MU_LIST.addAll(2, listOf<Int>(100, 100)) // MU_LIST의 2번에 리스트 [100, 100]의 모든 요소 추가
println(MU_LIST) // [7, 6, 100, 100, 50] 출력

• List는 순서가 있는 자료 구조이다.

val A_LIST = listOf<Int>(1, 2, 3, 4)
val B_LIST = mutableListOf<Int>(1, 2, 3, 4)
val C_LIST = listOf<Int>(4, 3, 2, 1)
println(A_LIST == B_LIST) // true 출력 : [1, 2, 3, 4]와 [1, 2, 3, 4]는 같다.
println(A_LIST == C_LIST) // false 출력 : [1, 2, 3, 4]와 [4, 3, 2, 1]은 다르다.

 

3. Set

• 수학에서의 집합을 나타내는 자료구조. -> 같은 요소 중복 불가

• 인덱스로 접근할 수 없고, 순서가 없다.

• immutable

     - setOf<자료형>(값1, 값2, ...)

• mutable

     - mutableSetOf<자료형>(값1, 값2, ...)

val IMMU_SET = setOf<String>("a", "aa", "c", "aa", "c", "b")
val MU_SET = mutableSetOf<String>("d", "dd", "w", "dd", "w", "e")
println(IMMU_SET) // [a, aa, c, b] 출력 : 같은 요소 중복 불가
println(MU_SET) // [d, dd, w, e] 출력 : 같은 요소 중복 불가
// Set의 메소드
println(IMMU_SET.contains("a")) // true 출력 : IMMU_SET에 "a" 포함
println(IMMU_SET.contains("d")) // false 출력 : IMMU_SET에 "d"가 포함되어 있지 않음.
println(IMMU_SET.containsAll(setOf<String>("a", "aa"))) // true 출력 : IMMU_SET에 ["a", "aa"]의 원소들이 모두 포함

MU_SET.remove("w") // MU_SET에서 "w" 제거
MU_SET.remove("z") // 요소에 없는 걸 지워도 에러 X. 아무것도 안 일어남.
println(MU_SET) // [d, dd, e] 출력

• Set은 순서가 없는 자료 구조이다.

val A_SET = setOf<Int>(1, 2, 3, 4)
val B_SET = mutableSetOf<Int>(1, 2, 3, 4)
val C_SET = setOf<Int>(4, 3, 2, 1)
println(A_SET == B_SET) // true 출력 : [1, 2, 3, 4]와 [1, 2, 3, 4]는 같다.
println(A_SET == C_SET) // true 출력 : [1, 2, 3, 4]와 [4, 3, 2, 1]도 같다.

 

4. Map

• 키 - 값 (Key - Value) 형태의 자료 구조.

• 하나의 Map에서 동일한 키는 가질 수 없다. (유일해야 한다.)

• immutable

     - mapOf<자로형, 자료형>(키1 to 값1, 키2 to 값2, ...)
     - mapOf<자료형, 자료형>(Pair(키1, 값1), Pair(키2, 값2), ...)

• mutable

     - mutableMapOf<자료형, 자료형>(키1 to 값1, 키2 to 값2, ...)

     - mutableMapOf<자료형, 자료형>(Pair(키1, 값1), Pair(키2, 값2), ...)

val IMMU_MAP = mapOf<String, Double>("Korean" to 4.5, "Math" to 4.0, "English" to 4.5)
val MU_MAP = mutableMapOf<String, Double>(Pair("Korean", 4.5), Pair("Math", 4.0), Pair("English", 4.5))
println(IMMU_MAP) // {Korean=4.5, Math=4.0, English=4.5} 출력
println(MU_MAP) // {Korean=4.5, Math=4.0, English=4.5} 출력
// Map의 메소드
println(IMMU_MAP.keys) // [Korean, Math, English] 출력
println(IMMU_MAP.values) // [4.5, 4.0, 4.5] 출력
println(IMMU_MAP.size) // 3 출력
println(IMMU_MAP.get("Math")) // 4.0 출력
println(IMMU_MAP.get("Science")) // null 출력
println(IMMU_MAP["English"]) // 4.5 출력
println(IMMU_MAP.getOrDefault("Korean", 4.0)) // 4.5 출력 : 존재하는 키를 적으면 그 키에 맞는 값이 나옴.
println(IMMU_MAP.getOrDefault("Science", 4.0)) // 4.0 출력 : 없는 키를 적으면 default 값이 나옴. (map에 그 키와 값이 추가되는 것은 아님)

MU_MAP.put("Science", 3.5) // MU_MAP에 키가 "Science"이고 값이 3.5인 요소 추가
println(MU_MAP) // {Korean=4.5, Math=4.0, English=4.5, Science=3.5}
MU_MAP.remove("Korean") // MU_MAP의 "Korean" 키 요소 삭제
println(MU_MAP) // {Math=4.0, English=4.5, Science=3.5}}

 

참고

• 변수가 수정되는 것과 컬렉션이 수정되는 것은 다르다.

var immu_list = listOf<Int>(1, 2, 3)
immu_list[0] = 5 // 오류 발생 : immutable이기 때문에 list를 수정할 수 없다.
immu_list = listOf<Int>(5, 6, 7, 8) // but 이건 var로 선언된 변수 자체를 바꾼 것이기 때문에 가능.
println(immu_list) // [5, 6, 7, 8] 출력

• 컬렉션 변수에 .을 찍으면 사용 가능한 메소드를 볼 수 있다.

     - 메소드를 전부 외우고 다니는 것은 불가능하다.

     - 안드로이드 스튜디오에서 제공하는 기능 (웬만한 IDE에서는 다 되는 듯 하다.)

 

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90

'📱 Android > 💻 Kotlin' 카테고리의 다른 글

[Android/Kotlin] 10. 반복문  (0) 2022.10.06
[Android/Kotlin] 9. 이터러블(Iterable)  (0) 2022.10.06
[Android/Kotlin] 7. 배열  (0) 2022.10.04
[Android/Kotlin] 6. 흐름 제어  (1) 2022.10.04
[Android/Kotlin] 5. 함수  (0) 2022.10.04
댓글
250x250
공지사항