본문 바로가기

안드로이드 프로그래밍/kotlin

[Android Studio] kotlin 기본 문법2( 배열, 컬렉션 )

📌 배열


- 여러 개의 값을 하나의 변수에 저장할 수 있도록 배열(Array) 과 컬렉션(Collection) 이라는 데이터 타입을 제공한다.

 

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

 

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

 

- 먼저 개수를 정해 놓고 사용해야 하며 중간에 개수를 추가하거나 제거할 수 없다.

 

var 변수 = Array(개수)
var students = IntArray(10)
var longArray = LongArray(10)
var CharArray = CharArray(10)
var FlatArray = FloatArray(10)
var DoubleArray = DoubleArray(10)

 

students 라는 이름으로 정수형 데이터를 담을 수 있는 10개의 공간을 가진 배열이 만들어지고 각 공간에는 아직 무슨 값이 들어 있는지 모른다. 

 


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

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

- 괄호 안의 첫 번째 숫자인 10만 변경해서 사용하면 그 숫자 만큼 빈 문자열로 된 배열 공간을 할당

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

 

▼ 값으로 배열 공간 할당하기

- arrayOf 함수를 사용해서 String 값을 직접 할당할 수도 있다.

var dayArray = arrayOf("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

 

 

▼ 배열에 값 입력하기

 

1. 배열을 선언한 변수명 옆에 대괄호 ([]) 를 사용하고, 대괄호 안에 값을 저장할 위치의 인덱스 번호를 작성한다.

그리고 등호(=)를 사용해서 값을 입력하면 된다.

배열명[인덱스] = 값

 

2. set 함수를 사용, 배열이 제공하는 set함수에 인덱스와 값을 파라미터로 넘겨주면 된다.

배열명.set(인덱스 , 값)

 

 

▼ 배열에 있는 값 꺼내기

- 값을 꺼내는 배열의 함수는 get() 이다.

배열명[인덱스]
배열명.get(인덱스)

 

 


 


 

📌 컬렉션

 

- 컬렉션은 동적 배열이라고도 하는데, 이는 배열과는 다르게 공간의 크기를 처음 크기로 고정하지 않고 임의의 개수를 담을 수 있다.

 

- 컬렉션은 크게 세가지로 리스트, 맵, 셋 이 있다.


▼ 리스트 (List)

- 리스트는 저장되는 데이터에 인덱스를 부여한 컬렉션이며 중복된 값을 입력할 수 있다.

 

- 코틀린에서 동적으로 리스트를 사용하기 위해서는 리스트 자료형 앞에 뮤터블이라는 접두어가 붙는다.

더보기

* 뮤터블(Mutable) 이란?

프로그래밍 언어에서 뮤터블은 변할 수 있는 데이터 타입을 가리키는 용어이다.

앞에서 공부한 변수와 비교하면 var 이 뮤터블이다. 그리고 반대 개념인 이뮤터블(Immutable)이 있는데 이것은 val 과 같이 변할 수 없는 데이터 타입을 가리키는 용어이다.

 

코틀린은 컬렉션 데이터 타입을 설계할 때 모두 이뮤터블로 설계하였다. 기본 컬렉션인 리스트, 맵, 셋 은 모두 한 번 입력된 값을 바꿀 수 없다. 그래서 컬렉션의 원래 용도인 동적 배열로 사용하기 위해서는 뮤터블로 만들어진 데이터 타입을 사용해야 한다.

- mutableList, mutableMap, mutableSet 사용 

 

 

 

▼ 리스트 생성하기 : mutableListOf

var list = mutableListOf("MON", "TUE", "WED")

-> mutableList 변수에 "MON", "TUE", "WED" 3개의 값을 가진 크기가 3인 동적 배열 리스트가 생성된다.

 

 

 

▼ 리스트에 값 추가하기 : add

mutableList.add("THE")

-> add 함수를 사용해서 값을 추가한다. 값이 추가되면서 동적으로 리스트의 공간이 자동으로 증가한다.

 

 

 

▼ 리스트에 입력된 값 사용하기 : get

var variable = mutableList.get(1)

-> get 함수로 인덱스를 지정해서 몇 번째 값을 꺼낼지 명시해야 한다.

 

 

▼ 리스트값 수정하기 : set

mutableList.set(1, "수정할 값")

-> set 함수를 사용해서 특정 인덱스의 값을 수정할 수 있다.

 

 

▼ 리스트에 입력된 값 제거하기 : removeAt

mutableList.removeAt(1)

-> 리스트에 입력된 값의 인덱스를 지정해서 삭제할 수 있다.

 

-> 두 번째 값을 삭제하면 세 번째 값부터 인덱스가 하나씩 감소하면서 빈자리의 인덱스로 이동

 

 

 

▼ 빈 리스트 사용하기

- 아무것도 없는 빈 리스트를 생성하면 앞으로 입력되는 값의 데이터 타입을 알 수 없기 때문에 값의 타입을 추론할 수 없다. 그러므로 빈 컬렉션의 경우 데이터 타입을 직접적으로 알려주는 방법을 사용해야 한다.

var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>( )
var stringList = mutableListOf<String>( )

 

▒ 제네릭

더보기

앞의 리스트 컬렉션을 생성하면서 <> 괄호를 사용했는데, 이 괄호의 정식 명칭은 제네릭 (Generic) 이다.

제네릭은 컬렉션이 사용하는 값의 타입을 지정하기 위한 도구이다. 코틀린에서 컬렉션은 제네릭을 사용하지 않으면 생성할 수 없다. 단, 값으로 초기화할 때는 입력되는 값으로 타입을 추론할 수 있기 때문에 제네릭을 쓰지 않아도 생성할 수 있다.

 

 

▼ 컬렉션 개수 가져오기 : size

mutableList.size

 

 

▼ 셋 (set) 

- 셋은 중복을 허용하지 않는 리스트이다.

- 리스트와 유사한 구조이지만 인덱스로 조회할 수 없고, get 함수도 지원하지 않는다. 

 

set = mutableSetOf<String>()
set.add("JAN")
set.add("FEB")
set.add("MAR")
set.add("JAN") //동일한 값은 입력되지 않는다.

 

- 셋은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 직접 사용할 수 없다. 

 

Log.d("Collection", "Set 전체 출력 = ${set}")

-> 셋 에 있는 모든 값을 출력해보는 예시이다.

 

 

- 셋은 값이 중복되지 않기 때문에 값으로 직접 조회해서 삭제할 수 있다.

set.remove("FEB")

 

 

▼ 맵 (Map)

- 맵은 키(Key) 와 값(Value) 의 쌍으로 입력되는 컬렉션이다.

 

- 맵의 키는 리스트의 인덱스와 비슷한데 맵에서는 키를 직접 입력해야 한다.

 

- 제네릭으로 키와 값의 데이터 타입을 지정해서 맥을 생성한다.

 

var map = mutableMapOf<String, String>( )

 

1. 빈 맵으로 생성하고 값 추가하기

- 값을 추가하기 위해 제공하는 맵에서 제공되는 put 함수에 키와 값을 입력하면 된다.

var map = mutableMapOf<String, String>( )
map.put("키1", "값2")
map.put("키2", "값2")
map.put("키3", "값3")

-> 키와 값을 추가할 때마다 리스트처럼 공간이 늘어난다.

 

2. 맵 사용하기

- get 함수에 키를 직접 입력해서 값을 꺼낼 수 있다.

Log.d("CollectionMap", "map에 입력된 키1의 값은 ${map.get("키1")} 이다")

 

3. 맵 수정하기

- put 함수를 사용할 때 동일한 키를 가진 값이 있으면 키는 유지된 채로 그 값만 수정된다.

map.put("키2", "수정")

 

4. 맵 삭제하기

- remove 함수에 키를 입력해서 값을 삭제할 수 있다.

- 리스트와는 다르게 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지된다.

map.remove("키2")

 

 

▼ 이뮤터블 컬렉션

- 코틀린은 일반 배열처럼 크기를 변경할 수 없으면서 값 또한 변경할 수 없는 이뮤터블 컬렉션을 지원한다.

 

- 한 번 입력된 값을 변경할 수 없기 때문에 add나 set 함수는 지원하지 않고 최초 입력된 값을 '사용'만 할 수 있다.

 

- 즉, 수정, 추가, 제거 모두 안된다.

 

- 이뮤터블 컬렉션을 저장할 때는 val 로 선언하고 변수명을 대문자로 표시하는 게 좋다.

 

배열(Array) 

: 하나의 변수에 여러 개의 정해진 값을 담을 수 있게 해주는 데이터 타입이다.

 처음 정해진 값의 개수는 바꿀 수 없다.

컬렉션(Collection)

: 여러 개의 값을 담을 수 있는 배열은 값의 개수가 증가하면 사용할 수 없는 단점이 있기 때문에 동적으로 크기를 변경할 수 있도록 만들어진 동적 배열이다.  동적 배열에는 크게 리스트, 셋, 맵 세가지의 데이터 타입이 있으며 이것들을 모두 통칭해서 부르는 용어가 컬렉션이다.

뮤터블(Mutable)

: 입력된 값을 변경할 수 있는 것을 말한다.  대표적으로 var 로 선언된 변수는 모두 뮤터블 이다.

리스트(List)

: 컬렉션의 한 종류로 인덱스를 사용하는 데이터 타입이다.  인덱스가 있기 때문에 중복된 값을 넣을 수도 있다.

셋(Set)

: 리스트에서 인덱스가 빠진 데이터 타입이다. 

  값을 중복해서 넣을 수 없다.

맵(Map)

: 키(key)와 값(value)을 쌍으로 갖는 데이터 타입이다.

  맵의 키는 리스트의 인덱스처럼 사용할 수 있다.


 

728x90
반응형