배열과 컬렉션

JENNA·2023년 12월 6일
0

//Int와 Double... 타입 => 하나의 변수에 하나의 값만 저장하도록 설계
//but 프로그래밍 하다 보면 하나의 변수에 여러 개의 값을 저장해야할 때 o
//여러 개의 값을 하나의 변수에 저장할 수 있도록 배열(Array)과 컬렉션(Collection)이라는 데이터 타입 제공

배열
:여러 개의 값을 담을 수 있는 대표적인 자료형

  • 먼저 배열 공간의 개수를 할당하거나 초기화 시에 데이터를 저장해두면 데이터의 개수만큼 배열의 크기가 결정
  • 개수를 정해 놓고 사용해야 하며, 중간에 개수 추가, 제거 x
  • 배열은 다른 데이터 타입과 마찬가지로 변수에 저장해서 사용 o, 다음과 같은 형태로 선언함
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 함수 사용. 배열이 제공하는 set 함수에 인덱스와 값을 파라미터로 줌
배열명.set(인덱스, 값)
  • 첫 번째부터 열 번째까지의 인덱스 값을 바꾸는 예제코드
students[0] = 90
students.set(1, 91)
...
sutdents.set(8, 98)
students[9] = 99
  • 만약 배열의 범위를 벗어난 인덱스에 값을 넣으면? Exception 발생, 종료
var intArray = IntArray(10)
intArray[10] = 100 // Exception 발생. intArray의 마지막 인덱스는 9입니다.

--> ArrayIndexOutOfBoundsException 발생

베열 - 배열에 있는 값 꺼내기

  • 저장할 때 처럼 대괄호 안에 index입력해서 값 가져오기 or get()이용
배열명[인덱스]
배열명.get(인덱스)
  • 배열 intArray의 일곱 번째 값을 seventhValue 변수에 저장
var seventhValue = intArray[6]
  • 배열 intArray의 열 번째 값을 get 함수 사용 tenthValue 변수에 저장
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 프로퍼티 사용하면 컬렉션의 개수를 가져올 수 있음


0개의 댓글