반응형

코틀린에는 배열의 종류가 4가지가 있다.

array, list, set, map 네가지를 비교해보자

 

 

1. Array

// Array 선언
var arr = arrayOf("A", "B", "C", "D")

println(arr[0] + "  " + arr[1])
arr[0] = "AAA"
println(arr[0] + "  " + arr[1])

// A  B
// AAA  B
  • 특징 
    • Array 선언시 배열의 크기를 지정해야 한다.
      • 지정된 배열의 크기는 변경 불가하다.
        (python의 list.append(), C#의 list.ㅁdd() 사용 불가)
    • 배열 안의 값을 자유롭게 변경이 가능하다.
      • arr[0] = "AAA"처럼 인덱스값으로 내용 수정 가능
    • 순서를 저장한다.
    • 중복값을 허용한다.

 


2. List

// Immutable List

var imList = listOf<String>("mL-1", "mL-2", "mL-3")
for (a in imList) { println(a)}

// 읽기 전용(immutable)인 리스트의 값을 변경을 시도하기에 에러 발생
// imList[0] = "mL-4"

println("---------------")
for (a in imList) { println(a)}
println("---------------")

// error



// Mutable List

var mList = mutableListOf<String>("mL-1", "mL-2", "mL-3")
for (a in mList) { println(a)}

// mutable 리스트기에 값 변경 가능
mList[0] = "ML-4" // mList.set(0, "mL-4")도 같은 기능

// 리스트 값 추가
mList.add("mL-5")

println("---------------")
for (a in mList) { println(a)}
println("---------------")


// mL-1
// mL-2
// mL-3
// ---------------
// mL-4
// mL-2
// mL-3
// mL-5
// ---------------

 

  • 특징
    • List는 순서를 저장한다.
    • 중복값을 허용한다.
    • List는 두가지 mutable, immutable 두가지로 나뉜다.
      • immutable
        • 기본 값, 읽기전용 (수정 불가)
      • mutable
        • 값 수정 가능
        • 인덱스에 직접 접근하여 값 변경 가능
        • 배열 추가/삭제 가능 (add/remove)
    • List의 단점
      • 메모리에 순서대로 할당되지 않는다.
        • 검색기능 활용시 성능저하가 발생한다.
          (메모리 순서대로 검색이 아니라 각 데이터가 있는 메모리 주소를 찾아들어가 값을 확인하고 다음 주소로 이동해야 하기에 성능 저하가 발생한다)

 


3. Set

// immutable Set
var imSet = setOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }

// 1
// 2
// 3
// (중복값은 허용되지 않기에 1, 2, 3 한가지씩 저장된다)


// mutable Set
var mSet = mutableSetOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }
println("---------------")
mSet.add(4)
mSet.remove(1)
for (a in imSet) { println(a) }
println("---------------")

// 1
// 2
// 3
// ---------------
// 2
// 3
// 4
// ---------------
// (중복값이 허용되지 않아 1, 2, 3만 할당)
// (mutable이기에 내용 수정 가능 add/remove)
  • 특징
    • List와 같이 immutable / mutable로 나뉜다.
    • 순서를 저장하지 않는다.
    • 중복 값을 허용하지 않는다.

 


4. Map

// immutable Map
var imMap = mapOf("name" to "J", "age" to "13", "country" to "korea")
println(imMap)
println(imMap["name"])

// {name=J, age=13, country=korea}
// J


// mutable Map
var mMap = mutableMapOf("트와이스" to "TT", "아이유" to "내 손을 잡아", "NCT" to "영웅")
mMap.put("QWER", "고민중독")
println("-Put <mMap.put(\"QWER\", \"고민중독\")>")
println(mMap)
mMap.remove("NCT")
println("-Remove <mMap.remove(\"NCT\")>")
println(mMap)
mMap.remove("QWER", "내 이름 맑음")


// -Put <mMap.put("QWER", "고민중독")>
// {트와이스=TT, 아이유=내 손을 잡아, NCT=영웅, QWER=고민중독}
// 영웅
// -Remove <mMap.remove("NCT")>
// {트와이스=TT, 아이유=내 손을 잡아, QWER=고민중독}

 

  • 특징
    • key : value의 쌍으로 저장되는 자료 구조
      • 파이썬의 dictionary와 같은 형식
    • immutable / mutable로 분리됨
    • key값은 중복 불가
    • value값은 중복 가능

 

반응형

+ Recent posts