Chapter 03. 코틀린 기본문법
4 배열과 컬렉션
배열
1
var 변수 = Array(개수)
배열 객체는 기본 타입 뒤에 Array
를 붙여서 만든다.
1
2
3
4
5
var students = IntArray(10)
var longArray = LongArray(10)
var CharArray = CharArray(10)
var FloatArray = FloatArray(10)
var DoubleArray = DoubleArray(10)
문자 배열에 빈 공간 할당하기
String은 기본 타입이 아니기 때문에 StringArray는 없지만 다음과 같이 빈 문자열로 된 배열 공간을 할당할 수 있다.
1
var stringArray = Array(10, {item->""})
값으로 배열 공간 할당하기
arrayOf()
함수를 사용해서 String 값을 직접 할당할 수도 있다.
1
var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
배열에 값 입력하기
배열명[인덱스] = 값
배열명.set(인덱스, 값)
배열에 있는 값 꺼내기
배열명[인덱스]
배열명. get(인덱스)
컬렉션
- 동적 배열: 배열과 다르게 공간의 크기를 처음 크기로 고정하지 않고 임의의 개수를 담을 수 있기 때문이다.
- 종류: 리스트(List), 맵(Map), 셋(Set)
리스트(List)
- 저장되는 데이터에 인덱스를 부여한 컬렉션
- 중복된 값을 입력할 수 잇다.
- 뮤터블(Mutable) 접두어를 통해 동적으로 리스트를 사용한다.
- 접두어가 없는 리스트는 잘 사용하지 않는다.
1
var list = mutableListOf("MON", "TUE", "WED")
리스트 생성하기:
mutableListOf()
1
var mutableList = mutableListOf("MON", "TUE", "WED")
리스트에 값 추가하기:
add(추가할값)
리스트에 입력된 값 사용하기:
get(인덱스)
리스트값 수정하기:
set(인덱스, 수정할값)
리스트에 입력된 값 제거하기:
removeAt(인덱스)
빈 리스트 사용하기
아무것도 없는 빈 리스트를 생성하면 앞으로 입력되는 데이터의 타입을 추론할 수 없다. 따라서 빈 컬렉션의 경우 데이터타입Of
만으로 생성되지 않고 데이터타입을 직접적으로 알려주는 방법을 사용해야 한다.
mutableListOf<타입>()
1
2
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()
var stringList = mutableListOf<String>()
제네릭
- 컬렉션이 사용하는 값의 타입을 지정하기 위한 도구
- 컬렉션은 제네릭을 사용하지 않으면 생성할 수 없다.
값으로 초기화할 때는 타입을 추론할 수 있기 때문에 제네릭을 쓰지 않아도 생성할 수 잇다.
- 컬렉션 개수 가져오기:
size
셋(Set)
중복을 허용하지 않는 리스트(List)
리스트와 유사한 구조이지만 인덱스로 조회할 수 없고,
get
함수도 지원하지 않는다.빈 셋으로 초기화하고 값 입력하기
1 2 3 4 5
var set = mutableSetOf<String>() set.add("JAN") set.add("FEB") set.add("MAR") set.add("JAN") // 동일한 값은 입력되지 않는다.
셋 모든 값 출력하기
셋은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 직접 사용할 수 없다.
1
Log.d("Collection", "Set 전체 출력 = ${set}")
셋 삭제하기
값이 중복되지 않기 때문에 값으로 직접 조회해서 삭제할 수 있다.
1
set.remove("FEB")
맵(Map)
- 키(key)와 값(value)의 쌍으로 입력되는 컬렉션이다. 키는 마치 리스트의 인덱스와 비슷한데 리스트와는 다르게 키를 직접 입력해야 한다.
제네릭으로 키와 값의 데이터 타입을 지정해서 맵을 생성한다.
맵 생성하기
1
var map = mutableMapOf<String, String>
빈 맵으로 생성하고 값 추가하기
1 2 3
var map = mutableMapOf<String, String>() map.put("키1", "값1") map.put("키2", "값2")
키와 값을 추가할 때마다 리스트처럼 공간이 늘어난다.
맵 사용하기
1
Log.d("CollectionMap", "map에 입력된 키1의 값은 ${map.get("키1")}입니다.")
맵 수정하기:
put(키, 수정값)
put
함수를 사용할 때 동일한 키를 가진 값이 있으면 키는 유지된 채로 그 값만 수정된다.- 맵 삭제하기:
remove(키)
컬렉션 값의 단위 = 엘리먼트
컬렉션에 입력되는 값은 각각을 엘리먼트(Element)라고 한다. 값이라고 해도 되지만 맵을 지칭할 때 맵의 값(엘리먼트 자체)을 가르키는 건지, 엘리먼트의 값(실제 값)을 가르키는 건지 2개의 용어가 충돌할 수 있기 때문에 엘리먼트라고 이해하는 것이 좋다.
엘리먼트는 맵의 입력 단위인 키와 값을 합친 것을 말한다.
1 2 리스트 엘리먼트 = 리스트의 (값) 맵 엘리먼트 = 맵의 (키와 값)
이뮤터블 컬렉션
- 이뮤터블 컬렉션은 기존 컬렉션에서
mutable
접두어가 제거된 형태로 사용한다.
1
var list = listOf("1", "2")
- 한 번 입력된 값을 변경할 수 없기 때문에
add
나set
함수는 지원하지 않고 최초 입력된 값을 사용만 할 수 있다. - 요일 데이터 등 여러 개의 값을 중간에 수정하지 않고 사용할 필요가 있을 때 이뮤터블 컬렉션을 사용한다.
- 이뮤터블 컬렉션을 저장할 때는 상수로 선언하고 상수명을 대문자로 표시하는 것이 좋다.