이것이 안드로이드다 with 코틀린(고돈호 지음) 으로 공부한 내용을 정리한 글입니다.
배열은 하나의 변수에 여러 개의 값을 저장할 수 있는 대표적인 자료형입니다. 배열은 저장될 수 있는 값의 개수를 먼저 정해놓고 사용해야 하며 중간에 개수를 추가하거나 제거할 수 없습니다.
배열 객체는 Int , Long , Char 등과 같은 기본 타입 뒤에 Array
를 붙여서 만듭니다.
var 배열명 = {Type}Array(개수)
ex) var numbers = IntArray(10)
var name = CharArray(10)
String은 기본 타입이 아니기 때문에 StringArray는 존재하지 않습니다. 대신 다음과 같이 배열을 선언하면 빈 문자열로 된 배열 공간을 할당할 수 있습니다.
var stringArray = Array(10, {item->""})
arrayOf()
함수를 사용하면 배열 선언과 동시에 값을 입력할 수 있습니다.
var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
배열에 값을 변경하는 방법에는 두가지가 존재합니다.
1. 배열명[인덱스] = 값
ex) students[0] = 90
2. 배열명.set(인덱스, 값)
ex) students.set(1, 91)
배열에 있는 값을 가져오는 방법 역시 두가지가 존재합니다.
1. 배열명[인덱스]
ex) var number = students[0]
2. 배열명.get(인덱스)
ex) var number = students.get(1)
컬렉션은 배열과 같이 여러 개의 값을 저장하는 자료형입니다. 배열과 다른 점은 공간의 크기가 고정되지 않고 임의의 개수를 담을 수 있는 동적 배열이라는 점입니다. 컬렉션으로는 List , Map , Set 등이 있습니다. 코틀린에서 동적으로 컬렉션을 사용하기 위해서는 항상 자료형 앞에 Mutable 이라는 접두어를 붙여야 합니다.
리스트는 저장되는 데이터에 인덱스를 부여한 컬렉션이며 중복된 값을 저장할 수 있습니다.
var mutableList = mutableListOf("MON", "WED")
리스트에 값이 추가되면서 자동으로 리스트의 공간도 증가합니다.
mutableList.add(1, "TUE") // 인덱스 1에 값 추가
mutableList.add("THE") // 리스트 맨 뒤에 값 추가
var dayOfWeek = mutableList.get(1)
mutableList.set(1, "FRI")
리시트에서 값을 삭제하면 그 이후의 값들이 빈공간을 메꾸기 위해 당겨집니다. 즉, 리스트의 공간이 줄어듭니다.
mutableList.removeAt(1)
리스트를 선언할 때 빈 리스트를 생성하면 저장될 데이터의 타입을 알 수 없기 때문에 제네릭을 사용하여 데이터 타입을 알려주어야 합니다.
var 변수명 = mutableListOf<Type>()
ex) var strigList = mutableListOf<String>()
제네릭
클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
size
프로퍼티를 사용하여 리스트에 저장된 값의 개수를 가져올 수 있습니다.
mutableList.size
size
는 get
이나 set
과 달리 함수가 아닙니다.
Set은 중복을 허용하지 않는 리스트라고 할 수 있습니다. 리스트와 달리 인덱스와 get
함수가 존재하지 않습니다.
var set = mutableSetOf("A", "B")
var set = mutableSetOf<Type>()
set.add("C")
Set은 인덱스로 데이터를 조회하는 함수가 없기 때문에 특정 위치의 값을 직접 사용할 수 없습니다.
Set은 중복을 허용하지 않기 때문에 값으로 직접 조회해서 삭제할 수 있습니다.
set.remove("A")
Map은 Key와 Value의 쌍으로 저장되는 컬렉션입니다. Map의 Key는 리스트의 인덱스처럼 값을 조회하는데 사용됩니다. Key는 중복될 수 없으나 Value는 중복된 값을 가질 수 있습니다.
var map = mutableMapOf<KeyType, ValueType>()
var map = mutableMapOf(Pair(Key, Value))
var map = mutableMapOf(Key to Value)
Key
에 해당하는 값이 Map에 없다면 Map에 값이 추가되고 있다면 값이 변경됩니다.
map.put(Key, Value)
var x = map.get(Key)
map.remove(Key)
코틀린에서 컬렉션은 기본적으로 Immutable로 구현됐습니다. 따라서 Immutable Collection은 컬렉션의 크기와 컬렉션 내에 저장된 값을 변경할 수 없습니다. 그렇기 때문에 동적으로 컬렉션을 사용하기 위해선 mutable
이라는 접두어를 붙여야합니다.
var list = listOf("1", "2") // Immutable Collection
var list = mutableListOf("1", "2") // Mutable Collection
Immutable Collection은 최초에 입력된 값만 사용할 수 있기 때문에 add
나 set
함수를 지원하지 않습니다. 이에 Immutable Collection은 상수로 선언(val
사용)하고 컬렉션 이름을 대문자로 표시하는 것이 좋습니다.
for 반복문은 일반적으로 특정 횟수만큼 코드를 반복하기 위해 사용합니다.
for (반복할 범위) {
// ...
}
변수를 시작값에서 종료값으로 증가시키면서 코드를 반복합니다.
for (변수 in 시작값..종료값) {
// ...
}
..
대신 until
을 사용하면 종료값 이전까지만 반복합니다.
for (변수 in 시작값 until 종료값) {
// ...
}
step
을 사용하여 변수의 증가폭을 결정할 수 있습니다.
for (변수 in 시작값..종료값 step 증가폭) {
// ...
}
downTo
를 사용하면 시작값에서 종료값로 감소하면서 실행할 수 있습니다. step
사용 가능합니다.
for (변수 in 시작값 downTo 종료값) {
// ...
}
배열이나 컬렉션을 엘리먼트의 개수만큼 반복할 수 있습니다. step
은 사용 불가능합니다.
for (변수 in 배열 또는 컬렉션) {
// ...
}
while 반복문은 일반적으로 특정 조건이 만족할 때까지 반복하기 위해 사용합니다. 조건식이 참인 동안 코드를 반복합니다. 따라서 조건식이 항상 참이라면 무한루프에 빠지게 됩니다.
while (조건식) {
// ...
}
var current = 1
val until = 12
while (current < until) {
current = current + 1
}
do
블록 안의 코드를 먼저 실행하고 while
문의 조건식을 확인합니다.
var game = 1
val match = 6
do {
game += 1
} while (game < match)
반복문을 탈출합니다.
for (index in 1..10) {
if (index > 5) {
break;
}
}
continue
이후의 코드는 실행하지 않고 다음 반복문을 수행합니다.
for (index in 1..10) {
if (index > 3 && index < 8) {
continue
}
Log.d("continue", "$index")
}
좋은 글 정리 잘 보고 갑니다