//Int와 Double... 타입 => 하나의 변수에 하나의 값만 저장하도록 설계
//but 프로그래밍 하다 보면 하나의 변수에 여러 개의 값을 저장해야할 때 o
//여러 개의 값을 하나의 변수에 저장할 수 있도록 배열(Array)과 컬렉션(Collection)이라는 데이터 타입 제공
배열
:여러 개의 값을 담을 수 있는 대표적인 자료형
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)
[위 코드 중 첫 번째 줄]
: 변수 students에 Int(정수형)공간을 10개 할당하라는 의미
-> students라는 이름으로 정수형 데이터를 담을 수 있는 10개의 공간을 가진 배열이 만들어지고, 각 공간에는 아직 무슨 값이 들어있는지 모름
-> 우리한테는 1이 첫 번째이지만, 컴퓨터는 0을 첫 번째로 인식
-> 그래서 10개의 공간을 가지는 위와 같은 배열의 index는 0-9 시작-끝
-> index: 배열은 여러 공간을 가지고 있으며 각 몇 번째의 공간을 가리킬 때 사용
(ex, 배열의 3번재 공간 = index 2를 사용)
(배열뿐만 아니라 컴퓨터 언어에서 위치를 나타내는 index는 0부터 시작)
배열 - 문자 배열에 빈 공간 할당하기
: String은 Int, Double..과 같은 기본 타입x -> StringArray는 x
var stringArray = Array(10, { item -> "" } )
수식이 조금 특이해 보일 수 있지만 일단은 괄호 안의 첫 번째 숫자인 10만 변경해서 사용하면 그 숫자만큼 빈 문자열로 된 배열 공간을 할당함
배열 - 값으로 배열 공간 할당하기
: arrayOf 함수를 활용하여 String값 직접 할당
var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
배열 - 배열에 값 입력
배열명[인덱스] = 값
배열명.set(인덱스, 값)
students[0] = 90
students.set(1, 91)
...
sutdents.set(8, 98)
students[9] = 99
var intArray = IntArray(10)
intArray[10] = 100 // Exception 발생. intArray의 마지막 인덱스는 9입니다.
--> ArrayIndexOutOfBoundsException 발생
베열 - 배열에 있는 값 꺼내기
배열명[인덱스]
배열명.get(인덱스)
var seventhValue = intArray[6]
var tenthValue = intArray.get(9)
컬렉션 Collection (동적배열)
: 배열과는 다르게 공간의 크기를 처음 크기로 고정 x, 임의의 개수로 담 o
컬렉션은 크게 리스트(List), 맵(Map), 셋(Set)이 있음
컬렉션 - 리스트(List)
: 저장되는 데이터에 index 부여한 컬렉션이며, 중복된 값 입력 o
-Kotlin에서 동적으로 리스트 사용하기 위해서는 리스트 자료형 앞에 뮤터블(mutable)이라는 접두어 붙음
(mutable: 변할 수 있음)
var list = mutableListOf("MON", "TUE", "WED")
컬랙션 - 리스트 생성하기: mutableListOf
변수에"MON", "TUE", "WED"값을 가진 크기가 3인 "동적 배열 리스트" 생성
var mutableList = mutableListOf("MON", "TUE", "WED)
컬랙션 - 리스트에 값 추가하기: add
:add함수 사용해서 값 추가, 값 추가되면서 동적으로 리스트 공간 자동 증가
add 함수 사용 -> 입력될 위치인 index를 따로 지정 x, 입력되는 순서로 됨
mutableList.add("THU")
"MON":[0],"TUE":[1],"WED":[2]
->"MON":[0],"TUE":[1],"WED":[2], "THU": [3]
컬랙션 - 리스트에 입력된 값 사용하기 : get
: get함수로 리스트에서 값 꺼낼 수 O
입력과는 다르게 사용할 때는 index를 지정해서 몇 번째 값 꺼낼 건지 명시
ex)두 번째 값을 변수에 저장
var variable = mutableList.get(1)
컬랙션 - 리스트값 수정 : set
: set 함수 사용해서 특정 index 값 수정
ex)두 번째 값을 수정하는 예시
mutalbeList.set(1, "수정할 값")
컬랙션 - 리스트에 입력된 값 제거하기 : removeAt
: removeAt 함수로 리스트에 입력된 값의 index를 지정해서 삭제
ex)두 번째의 값 삭제하는 예시
mutableList.removeAt(1)
두 번째 값 삭제하면 세 번째 값부터 index 하나씩 감소하면서 빈자리로 index 이동
"MON": [0], "TUE": [1], "WED": [2]
-> "MON": [0], "WED": [1]
("TUE"삭제되면서 3번 째 값인 "WED"의 인덱스는 2에서 1로 바뀜)
컬랙션 - 빈 리스트 사용하기
아무것도 없는 빈 리스트 생성하면 앞으로 입력되는 값의 데이터 타입을 알 수 없기 때문에 값 타입 추론 불가
-> 따라서 빈 컬렉션의 경우 '데이터 타입Of'만으로는 생성 x
-> 데이터 타입을 직접 알려줘야 함
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()
var stringList = mutableListOf<String>()
ex) 문자열로 된 빈 리스트 생성, 조작
// 생성
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 프로퍼티 사용하면 컬렉션의 개수를 가져올 수 있음