- 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 알아보기
'르탄즈 5기' 카테고리의 다른 글
[르탄즈 5기] 1/22 TIL (1) | 2024.01.22 |
---|---|
[르탄즈 5기] 사전캠프 강의 2주차 로또번호생성기 (0) | 2024.01.22 |
[르탄즈 5기] 앱개발 아티클 스터디 (0) | 2024.01.22 |
[르탄즈 5기] 온라인 '웰컴키트' 언박싱 후기 (1) | 2024.01.22 |
[르탄즈 5기] DAY 5 - TIL (0) | 2024.01.19 |