『Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린』 교재를 바탕으로 정리한 내용입니다.
lateinit var data1: Int // 오류!
lateinit var data2: String // 성공!
val data3: Int by lazy {
println("example")
10
}
fun main() {
println(data3 + 10) // "20" 출력
}
❗ 코틀린의 모든 변수는 객체이므로 코틀린의 모든 타입은 객체 타입
Char
문자 표현하는 타입. 문자를 작은따옴표(')로 감싸서 표현
Number 타입은 표현 불가
String
문자열 표현하는 타입. 문자열을 큰따옴표(")나 삼중 따옴표(""")로 감싸서 표현
String 타입의 데이터에 값을 포함해야 할 때 '$'기호(문자열 템플릿) 사용
val subject: String = "kotlin"
val score1: Int = "90"
val score2: Int = "10"
println("subject : $subject, score : ${score1}, sum : ${score1 + score2}")
fun some(): Unit {
println(10 + 20)
}
fun some2(): Nothing? {
return null
}
fun some2(): Nothing {
throw Exeption()
}
var data1: Int = 10
data1 = null // 오류!
var data2: Int? = 10
data2 = null // 성공!
fun example(data1: Int): Int {
return data1 * 10
}
fun sum(a: Int, b: Int) = a + b
제네릭 : 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
Array 클래스와 arrayOf() 함수
- arrayOf()는 선언 시 원소 값들을 지정해줄 수 있지만, Array를 선언할 때에는 불가능
- 대신 Array는 람다식 활용 가능
// 첫번째 인자가 3이고 두번째 인자는 0을 반환하는 람다 함수
// 0으로 초기화한 데이터를 3개 나열한 정수형 배열 선언
val data1: Array<Int> = Array(3, { 0 })
// 기초 타입 배열 선언
val data2: IntArray = IntArray(3,{ 0 })
val data3: BooleanArray = BooleanArray(3, { false })
// arrayOf() 함수 이용해 선언
val data4 = arrayOf<Int>(10, 20, 30)
// arrayOf() 기초 타입 배열 선언
val data5 = intArrayOf(10, 20, 30)
val data6 = booleanArrayOf(true, false, true)
// 비어있는 배열 객체 선언
val data7 = arrayofNulls<String>(3)
val data8 = emptyArray<String>
Collection 타입의 클래스는 가변(mutable)클래스와 불변(immutable)클래스로 나뉨
불변 클래스 : 데이터 대입 후 변경 불가
가변 클래스 : 초깃값 대입 후 데이터 변경 가능
→ List, Set, Map 모두 불변 타입이므로 동적으로 컬렉션을 이용하려면 MutableList, MutableSet, MutableMap 타입 활용
// List
var list = listOf<Int>(10, 20, 30)
var mutableList = mutableListOf(10, 20, 30)
// Set
var set = mutableSetOf("A", "B")
// Map
// Pair 객체 또는 '키 to 값' 형태로 이용
var map = mapOf<String, String>(Pair("one", "hello"), "two" to "world")
fun main() {
var data = 10
val result = if(data > 0) { // 조건문 결과값을 result 변수에 대입
println("data > 0")
true // 참일 때 반환값
} else {
println("data <= 0")
false // 거짓일 때 반환값
}
println(result)
}
fun main() {
var data: Any = 10
when ~~(data)~~ { // 데이터 생략가능
is String -> println("data is String")
20, 30 -> println("data is 20 or 30")
in 1..10 -> println("data is 1..10")
else -> println("data is not valid")
}
}
fun main() {
var data = arrayOf<Int>(10, 20, 30)
for(i in data.indices) {
print(data[i])
}
}
fun main() {
var data = arrayOf<Int>(10, 20, 30)
for((index, value) in data.withIndex()) {
print(value)
}
}
fun main(args: Array<String>) {
var x = 0
var sum1 = 0
while (x < 10) {
sum1 += ++x
}
println(sum1)
}