르탄즈 5기

[르탄즈 5기] 1/23(화) TIL

박매트 2024. 1. 23. 21:12

깃 학습자료 Chapter 03-4. 배열과 컬렉션

var map = mutableMapOf<String, String>()
map.put("key1", "value2")
map.put("key2", "value2")
map.put("key3", "value3")

 

셋(Set)

  • 셋은 중복을 허용하지 않는 리스트라고 할 수 있습니다.
  • 리스트와 유사한 구조이지만 인덱스로 조회할 수 없고, get 함수도 지원하지 않습니다.
  • String 타입의 값을 입력받기 위해 다음과 같이 선언할 수 있습니다.
var set = mutableListOf<String>()

 

빈 셋으로 초기화하고 값 입력하기

셋은 중복을 허용하지 않기 때문에 다음 코드를 보시면, 네 번째 줄에서 입력한 "JAN"은 입력되지 않습니다.

var set = mutableSetOf<String>()
set.add("JAN")
set.add("FEB")
set.add("MAR")
set.add("JAN") // 동일한 값은 입력되지 않습니다.

 

셋의 값 인덱싱?
 

셋은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 사용할 수 없습니다.

 

셋의 값 삭제하기
셋은 값이 중복되지 않기 때문에 다음과 같이 값을 직접 입력하여 삭제하여야 합니다.
remove 활용! set변수이름.remove(삭제하고자하는값)
set.remove("FEB")

 

다음은 컬렉션 Set을 사용한 예제 입니다. 안드로이드 스튜디오에서 해당 코드를 작성해서 로그를 확인해보아요!

package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 1. 셋 생성하고 값 추가하기
        var set = mutableSetOf<String>()
        set.add("JAN")
        set.add("FEB")
        set.add("MAR")
        set.add("JAN") // 동일한 값은 입력되지 않는다.
        // 2. 전체 데이터 출력해보기
        Log.d("Collection", "Set 전체출력 = ${set}")
        // 3. 특정 값 삭제하기
        set.remove("FEB")
        Log.d("Collection", "Set 전체출력 = ${set}")
    }
}

/** [로그캣 출력 내용]
Set 전체출력 = [JAN, FEB, MAR]
Set 전체출력 = [JAN, MAR]
*/

 

맵(Map)

 

  • 맵은 키(Key)와 값(Value)의 쌍으로 입력되는 컬렉션입니다.
  • 맵의 키는 리스트의 인덱스와 비슷한데 맵에서는 키를 직접 입력해야 합니다.
  • 제네릭으로 키와 값의 데이터 타입을 지정해서 맵을 생성합니다.
  • 다음은 키와 값의 타입을 모두 String으로 사용하기 위한 생성 예제입니다.
var map = mutableMapOf<String, String>()

 

 

빈 맵으로 생성하고 값 추가하기

값을 추가하기 위해 제공되는 맵에서 제공되는 put 함수에 키와 값을 입력하면 됩니다.

var map = mutableMapOf<String, String>()
map.put("key1", "value2")
map.put("key2", "value2")
map.put("key3", "value3")
 
 
 

맵 사용하기

 

get 함수에 키를 직접 입력해서 값을 꺼낼 수 있습니다.

Log.d("CollectionMap", "map에 입력된 key1의 값은 ${map.get("key1")}입니다.")

// [로그캣 출력 내용]
// map에 입력된 key1의 값은 value2입니다.

 

 

맵 수정하기

 

put 함수를 사용할 때 동일한 키를 가진 값이 있으면 키는 유지된 채로 그 값만 수정됩니다.

map.put("key2", "수정")

 

 

맵 삭제하기

  • remove 함수에 키를 입력해서 값을 삭제할 수 있습니다.
  • 리스트와는 다르게 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지됩니다.
     
map.remove("key2")

 

 

++

컬렉션 값의 단위 = 엘리먼트

  • 컬렉션에 입력되는 값은 각각을 엘리먼트(Element)라고 합니다.
  • 값이라고 해도 되지만 맵을 지칭할 때 맵의 값(엘리먼트 자체)을 가리키는 건지 엘리먼트의 값(실제 값)을 가리키는 건지, 2개의 용어가 충돌할 수 있기 때문에 엘리먼트라고 이해하고 있는 것이 좋습니다.
  • 엘리먼트는 맵의 입력 단위인 키와 값을 합친 것을 말하는데 이것은 리스트와 셋에서도 동일한 용어로 사용됩니다.
  • 즉 리스트의 값 또한 엘리먼트라고 부릅니다.
     

이뮤터블 컬렉션(Immutable Collection)

  • Kotlin은 일반 배열처럼 크기를 변경할 수 없으면서 값 또한 변경할 수 없는 이뮤터블 컬렉션을 지원합니다.
  • 이뮤터블 컬렉션은 다음과 같이 기존 컬렉션에서 mutable 이라는 접두어가 제거된 형태로 사용됩니다.
  • 불변형 컬렉션은 한 번 입력된 값을 변경할 수 없기 때문에 add나 set 함수는 지원하지 않고 최초 입력된 값만을 '사용'할 수 있습니다.
  • 배열과 다른 점은 크기뿐만 아니라 값의 변경 또한 불가능하다는 것입니다.
  • 즉 불변형 컬렉션은 수정, 추가, 제거 모두 안됩니다.
var immutableList = listOf("JAN", "FEB", "MAR") // 생성
Log.d("Collection", "리스트의 두 번째 값은 ${immtuableList.get(1)}입니다.) // 사용

// [로그캣 출력 내용]
// 리스트의 두 번째 값은 FEB입니다.

 

대표적인 예로 요일 데이터

var dayList = listOf("월", "화", "수", "목", "금", "토", "일)

 

 

복습정리

  • 배열(Array)
    하나의 변수에 여러 개의 정해진 값을 담을 수 있게 해주는 데이터 타입입니다.
    처음 정해진 값의 개수는 바꿀 수 없습니다.
  • 컬렉션(Collection)
    여러 개의 값을 담을 수 있는 배열은 값의 개수가 증가하면 사용할 수 없는 단점이 있기 때문에 동적으로 크기를 변경할 수 있도록 만들어진 동적 배열입니다.
    동적 배열에는 크게 리스트(List), 셋(Set), 맵(Map) 세 가지의 데이터 타입이 있으며 이것들을 모두 통칭해서 부르는 용어가 컬렉션입니다.
     
  • 뮤터블(Mutable)
    입력된 값을 변경할 수 있는 것을 말합니다.
    대표적으로 var로 선언된 변수는 모두 뮤터블입니다.
  • 리스트(List)
    컬렉션의 한 종류로 인덱스를 사용하는 데이터 타입입니다.
    인덱스가 있기 때문에 중복된 값을 넣을 수도 있습니다.
  • 셋(Set)
    리스트에서 인덱스가 빠진 데이터 타입입니다.
    값을 중복해서 넣을 수 없습니다.
  • 맵(Map)
    키(Key)와 값(Value)을 쌍으로 갖는 데이터 타입입니다.
    맵의 키는 리스트의 인덱스처럼 사용할 수 있습니다.