Kotlin 기본 문법3 - 배열과 리스트

KWANWOO·2021년 12월 26일
1

Kotlin 언어 배우기

목록 보기
3/8
post-thumbnail

코틀린 기본 문법 정리3 - 배열과 리스트

안드로이드 네이티브 앱 개발 공부를 위해 Kotlin의 기본적이면서도 중요한 문법들을 정리해보았다. 이 글은 array와 list에 관련된 내용이다.

1. Array(배열)

  • 초기화와 동시에 크기가 정해진다.
  • 메모리 공간에 연속적으로 저장된다.
  • 인덱스를 통하여 값에 접근한다.
  • 정적 타입

1) array 장점

  • 인덱스를 통한 검색이 용이하다.
  • 연속된 메모리 공간을 사용하여 메모리 관리가 편리하다.

2) array 단점

  • 배열에서 값을 삭제하더라도 배열의 크기가 줄어들지 않아 메모리가 낭비될 수 있다.
  • 배열은 정적이므로 배열의 크기를 컴파일 이전에 지정해야한다.
  • 배열은 정적이므로 배열의 크기가 정해진 이후 배열의 크기를 재조정 할수 없다.

3) array 문법

  • array 초기화
val array : Array<Int> = arrayOf(1, 2, 3)
  • array 안에 자료형이 다른 값도 같이 넣을 수 있다.
var array2 : Array<Any> = arrayOf(1, 'a', 3.4f) //Array<Any>로 타입 추론 됨
  • array의 값을 인덱스로 접근하여 변경 가능하다.
array[0] = 4

2. List(리스트)

  • 순서가 있는 엘리먼트들의 집합, 시퀀스(Sequence) 라고도 부른다.
  • 불연속적인 메모리 공간을 점유하여 메모리 관리가 용이하다.
  • 동적 타입
  • 인덱스는 몇 번째 데이터인가 정도의 의미를 갖음

1) list 장점

  • 포인터를 사용하여 다음 값의 위치를 가르키고 있으므로 삽입/삭제가 용이하다.
  • 동적타입으로 크기가 정해져있지 않다.
  • 빈틈 없는 엘리먼트 적재라는 장점을 취한 자료구조이다.
  • 메모리의 재사용이 용이하다.
  • 불연속적 메모리공간을 점유하여 메모리 관리가 편리하다.

2) list 단점

  • 불연속적인 메모리공간을 사용하여 검색 성능이 좋지 않다.
  • 포인터를 통하여 다음 값을 가르키므로 배열 대비 추가적인 메모리 공간이 필요하다.
  • 빈 엘리먼트(element: null)를 허용하지 않는다.

3) list 문법

  • list 초기화
val list1 : List<Int> = listOf(1, 2, 3)
  • list 안에 자료형이 다른 값도 같이 넣을 수 있다.
var list2 : List<Any> = arrayOf(1, 'a', 3.4f) //List<Any>로 타입 추론 됨
  • list는 인터페이스 이기 때문에 array처럼 값을 인덱스로 접근하여 변경은 불가능하다. 대신 get()과 같은 함수로 값을 가져오는 등의 기능은 가능하다.
list1[0] = 4 //오류가 발생한다.(수정 불가능)
var getResult = list1.get(0) // 리스트의 0번째 값을 가져옴

4) ArrayList

  • 크기가 자유롭고 값을 수정할 수 있는 리스트이다.
  • add, remove 등이 가능하다.
  • ArrayList 초기화
val arrayList : ArrayList<Int> = arrayListOf<Int>()
  • arrayList에 값 추가
arrayList.add(1) // 인덱스를 지정하지 않으면 맨 뒤에 삽입
arrayList.add(0, 2) //0번째 인덱스에 2 삽입
  • arrayList 값 삭제
arrayList.remove(1) // 앞에서 부터 1을 찾아 삭제
arrayList.removeAt(0) // 0번째 인덱스 값을 삭제
arrayList.removeLast() // 마지막 원소 삭제
arrayList.removeFirst() // 처음 원소 삭제
arrayList.clear() // 전체 원소 삭제

5) ArrayList와 MutableList의 차이

  • ArrayList와 MutableList 모두 수정이 가능한 리스트이다.
  • ArrayList와 MutableList의 선언
val a = mutableListOf<String>() //MutableList
val b = ArrayList<String>() //ArrayList
  • ArrayList 는 MutableList 인터페이스를 상속받은 구현체이다.
class ArrayList<E> : MutableList<E>, RandomAccess

명시적으로 처음부터 MutableList 중 특별히 ArrayList 를 원하는 경우에는 ArrayList 로 선언하고, List 이지만 수정, 삭제가 가능한 리스트를 사용할 경우에는 MutableList 로 선언하는 것이 좋다고 한다. 하지만 둘 다 ArrayList를 반환하기 때문에 어떤 것을 사용해도 크게 상관은 없다.

배열과 리스트 정리 끝!!!!

반복문을 정리하기 전에 반복문에서 배열과 관련된 내용이 꽤 나와서 일단 배열과 리스트를 먼저 정리했다. 이 내용을 토대로 다음에는 코틀린 반복문에 대해 작성할 예정이다. 코틀린 기본 문법 정리 세 번재인데 아직 많이 남았네...😭ㅠㅠ

profile
관우로그

0개의 댓글