2 minute read


1. Array

하나의 변수에 여러 값을 저장하기 위해 연속된 메모리 공간을 차지하는 정적 자료구조

1.1 특징

  • 선언과 동시에 크기가 정해진다
  • 다른 타입을 한 배열에 넣을 수 있다
  • 메모리 공간에 연속적으로 저장된다
  • 선언 후 배열의 크기를 변경할 수 없다 (값의 변경은 가능)
  • 요소를 삭제해도 크기가 고정이라 메모리가 낭비된다

1.2 사용예제

1.2.1 배열 선언하기

1
2
3
4
5
6
//기본타입 배열 선언
var charArray = CharArray(10)     //10칸짜리 Char 타입 배열 생성
var intArray = IntArray(10)       //10칸짜리 Int 타입 배열 생성

//빈 문자열 배열 선언(string은 기본타입이 아님)
var stringArray = Array(10, {item->""})   //10칸짜리 String 타입 배열 생성

1.2.2 배열에 값 추가하기

array는 plus를 사용하여 배열에 값을 추가한다. add는 지원하지 않음
plus 는 return 값이 있기 때문에 left value가 있어야한다.
기존배열에 값을 추가하는 것이 아닌 기존배열의 요소와 새로운 값을 추가하여 새로운 배열을 만드는 것

1
2
3
4
5
var array = arrayOf(1,2,3)

array = array.plus(4)   // 그냥 array.plus(4)라고 작성하면 추가 안됨

//result : [1,2,3,4]

1.2.3 배열 요소 접근

1
2
3
4
5
val intArray : Array<Int> = arrayOf(1,2,3)

intArray[0] //  1
intArray[1] //  2
intArray[2] //  3

1.2.4 배열 출력

1
2
3
4
5
var array = arrayOf(1,2,3)
var array2 = arrayOf(arrayOf(1, 2, 3), arrayOf(4, 5, 6))

println(Arrays.toString(array))
println(Arrays.deepToString(array2))



2. List

하나의 변수에 여러값을 저장하기 위해 불연속적인 메모리 공간을 차지하는 동적 자료구조

2.1 특징

  • 순서가 있는 자료형의 집합이다
  • 포인터를 통해 값에 접근이 가능하다
  • 동적 타입이다.
  • 메모리 관리가 편리하다.
  • List 안의 내용을 수정할 수 없다.
  • 검색성능이 좋지 않다.

2.2 사용예제

2.2.1 List 선언

1
2
3
4
5
val list = listOf(1,2,3)

val intList : List<Int> = listOf(1,2,3)

val stringList = List<String> = listOf("A","B","C")

2.2.2 리스트 요소 접근

1
2
3
4
5
val list = listOf(1,2,3)

list.get(0)   //  1
list.get(1)   //  2
list.get(2)   //  3

2.2.3 리스트를 배열로 변환

1
2
3
val list = listOf("A", "B", "C")

var array = list.toTypedArray()   //list -> array 변환



3. ArrayList

Array의 유용한 특징을 가져와 만든 List

3.1 특징

  • List지만 연속된 메모리 공간을 차지하는 Array 형태를 띄고 있다
  • 자유롭게 요소를 추가하거나 삭제할 수 있다.

3.2 사용예제

3.2.1 선언

1
2
3
4
5
6
7
val arrayList1 : arrayList<Int> = arrayListOf(1,2,3)

val arrayList2 = arrayList<Int>()

val arrayList3 : arrayList<String> = arrayListOf("가","나","다")

val arrayList4 = arrayList<String>()

3.2.2 값 추가

1
2
3
4
5
6
7
val arrayList = arrayList<Int>()

arrayList.add(1)
arrayList.add(2)
arrayList.add(3)

//result : {1,2,3}

3.2.3 값 삭제

1
2
3
val arrayList = arrayList<Int>(1,2,3)

arrayList.removeAt(0)  //{2,3}



전체적으로 비교해 봤을때 array와 List의 가장 큰차이점은 사이즈 변경의 유무가 제일 크다. 사이즈를 동적으로 사용하고 싶다면 array가 아닌 List를 사용하자

array의 요소를 삭제하고 싶으면 arrayList로 변경해서 삭제 후 다시 array로 변경