본문 바로가기
르탄즈 5기

[르탄즈 5기] Chaper 03-4 배열과 컬렉션

by 박매트 2024. 1. 22.
  • Kotlin 뿐만 아니라 대부분의 컴퓨터 언어들은 이처럼 여러 개의 값을 하나의 변수에 저장할 수 있도록 배열과 컬렉션이라는 데이터 타입을 제공합니다.
배열

 

배열이란? 여러 개의 값을 담을 수 있는 대표적인 자료형입니다.

먼저 배열 공간의 개수를 할당하거나 초기화 시에 데이터를 저장해두면 데이터의 개수만큼 배열의 크기가 결정됩니다.

 

배열은 다른 데이터 타입과 마찬가지로 변수에 저장해서 사용할 수 있으며 다음과 같은 형태로 선언합니다.

문자 배열.

var 변수 = Array(개수)

 

 

배열 객체는 Int, Long, Char 등과 같은 타입 뒤에 Array를 붙여서 만듭니다.

var students = IntArray(10)
var longArray = LongArray(10)
var CharArray = CharArray(10)
var FloatArray = FloatArray(10)
var DoubleArray = DoubleArray(10)

 

 

문자 배열에 빈 공간 할당하기

String은 Int, Double 등과 같은 기본 타입이 아니기 때문에 StringArray는 없지만 다음과 같이 사용할 수 있습니다.

var stringArray = Array(10, { item -> "" } )

-> 길이가 10인 배열을 할당했고, 그 안에 item들은 ""인 빈 값으로 채워넣었다. 라는 느낌

 

 

배열에 값 입력하기

  • 원래가 배열명[인덱스] = 값. 이렇게 해서 값을 입력할 수 있다.
  • set 함수를 이용해서도 사용 가능
  • 배열명.set(인덱스, 값)
  • 예제
students[0] = 90
students.set(1, 91)
...
sutdents.set(8, 98)
students[9] = 99

 

 

배열에 있는 값 꺼내기

  • 저장할 때와 마찬가지로 대괄호 안에 인덱스를 입력해서 값을 가져올 수 있으며 get()을 이용할 수도 있습니다.
  • 배열 intArray의 열 번째 값을 get 함수를 사용해서 tenthValue 변수에 저장합니다.
var tenthValue = intArray.get(9)

 

 

컬렉션

  • 컬렉션(Collection)은 다른 이름으로는 동적 배열이라고도 합니다.
  • 배열과는 다르게 공간의 크기를 처음 크기로 고정하지 않고 임의의 개수를 담을 수 있기 때문입니다.
  • 컬렉션은 크게 세 가지로 리스트(List), 맵(Map), 셋(Set)이 있으며 각각은 다음과 같은 용도로 사용할 수 있습니다.

 

리스트(List)

  • 리스트는 저장되는 데이터에 인덱스를 부여한 컬렉션이며 중복된 값을 입력할 수 있습니다.
  • Kotlin에서 동적으로 리스트를 사용하기 위해서는 리스트 자료형 앞에 뮤터블(Mutable)이라는 접두어(Prefix)가 붙습니다.
  • 예를 들면 mutableList, mutableMap, mutableSet이 있습니다.
  • 배열과 같이 '데이터 타입Of' 형태로 사용할 수 있습니다.
var list = mutableListOf("MON", "TUE", "WED")
 
뮤터블이란?
  • 뮤터블(Mutable)이란 변할 수 있다라는 의미를 가지고 있습니다.
  • Kotlin은 컬렉션 데이터 타입을 설계할 때 모두 이뮤터블(Immutable: 변할 수 없는)로 설계하였습니다.
  • 기본 컬렉션인 리스트(List), 맵(Map), 셋(Set)은 모두 한 번 입력된 값을 바꿀 수 없습니다.
  • 그래서 컬렉션의 원래 용도인 동적 배열로 사용하기 위해서는 뮤터블로 만들어진 데이터 타입을 사용해야 합니다.
     
     
리스트 생성하기: mutableListOf
var mutableList = mutableListOf("MON", "TUE", "WED)
 
리스트에 값 추가하기: add
mutableList.add("THU")

 

 
리스트에 입력된 값 사용하기: get
var variable = mutableList.get(1)

 

리스트값 수정하기: set
mutalbeList.set(1, "수정할 값")
 
리스트에 입력된 값 제거하기: removeAt
mutableList.removeAt(1)

 

빈 리스트 사용하기
  • 아무것도 없는 빈 리스트를 생성하면 앞으로 입력되는 값의 데이터 타입을 알 수 없기 때문에 값의 타입을 추론할 수 없습니다.
  • 그래서 빈 컬렉션의 경우 앞에서처럼 '데이터 타입Of'만으로는 생성되지 않고 데이터 타입을 직접적으로 알려주는 방법을 사용해야 합니다.
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()
var stringList = mutableListOf<String>()

 

예제와 같이, 문자열로 된 빈 리스트를 생성하고 조작할 수 있다.

// 생성
var stringList = mutableListOf<String>()

// 입력
stringList.add("월")
stringList.add("화")

// 사용
Log.d("Collection", "stringList에 입력된 두 번째 값은 ${stringList.get(1)}입니다.")

// 수정
stringList.set(1, "수정된 값")

// 삭제
stringList.removeAt(1) // 두 번째 값이 삭제 됩니다.

 

 
제네릭(Generic)
  • 리스트 컬렉션을 생성하면서 < > 괄호를 사용했는데, 이 괄호의 정식 명칭은 제네릭입니다.
  • 제네릭은 컬렉션이 사용하는 값의 타입을 지정하기 위한 도구입니다.
  • Kotlin에서 컬렉션은 제네릭을 사용하지 않으면 사용할 수 없습니다.
  • 단, 값으로 초기화 할 때는 입력되는 값으로 타입을 추론할 수 있기 때문에 제네릭을 쓰지 않아도 생성할 수 있습니다.

 

컬렉션 개수 가져오기 : size

  • size 프로퍼티를 사용하면 컬렉션의 개수를 가져올 수 있습니다. (mutableList.size)
  • 위에서 set, get 등은 '함수'라고 하고, size는 '프로퍼티'라는 용어를 사용했는데, 이 둘을 구분하는 방법은 괄호의 유무입니다.
     
  • 괄호가 있으면 함수
     
  • 괄호가 없으면 프로퍼티
     
     

다음 시간에 이어서... 

다음 시간 : Set, Map 알아보기