변수 선언 방법 - kotlin
변수타입 변수이름 = 초기화;
String name = "";
val/var 변수 이름 : 변수 타입 = 초기화
val/var name : String = ""
- valuable / immutable (val) : Read-only -> java final
- variable / mutable (var) : Read/Write
String name = "Name";
var name : String = "Name"
// 유추하기
var name = "Name"
// 대치
var name = "name"
name = "ABC"
final String name = "Name";
val name : String = "Name"
// 유추하기
val name = "Name"
// 대치 시
name = "ABC"
Val cannot be reassigned
Null 정의
String name = null;
// or
String name = "name";
name = null;
var name : String = "name"
name = null
var name : String? = null // null 허용하는 자료형
print(name.length) // error
print(name!!.length) // 강제로 non-null 정의 하지만 null 이면 빌드 시 error 뜸
print(name?.length) // safe call null이 아닐시에 실행
유추하기
val long = 0L // val long : Long = 0L
val float = 0f // val float : Float = 0f
val string = "String" // val string : String = "String"
val nul = null // 아무 값도 안가짐
val nul : Nothing? = null
val nul : Any? = null // 어느 값이든 가질 수 있음 java에서 object
Getters and Setters
var <propertyName>[ : <propertyType>] [ = <property_initializer>]
[<getter>]
[<setter>]
[]은 생략이 가능
class Sample<T> {
var list : List <T> = mutableListOf()
set(value) {
if (value.isNotEmpty()) {
field = value
}
}
get () = field
val isEmpty : Boolean
get() = this.list.isEmpty()
}
private 변수 만들기 - java
class Test {
private String name = "userName";
public String getName() {
return name;
}
}
class Test {
var name : String = "userName"
private set()
}
class Sample<T> {
private var list : List <T> = mutableListOf()
set(value) {
if (value.isNotEmpty()) {
field = value
}
}
get () = field
val isEmpty : Boolean
get() = this.list.isEmpty()
}
늦은 초기화 - lazy
val name : String by lazy {
"lazy initialized"
}
- 호출 시점에 초기화
- val(immutable)과 함께 사용
private val name : String by lazy {
println (" --- lazy init"
"lazy init"
}
fun test() {
println(name)
println(name)
println(name)
println(name)
}
private val textView : TextView by lazy {
findViewById<TextView>(R.id.tv)
}
늦은 초기화 - lateinit
lateinit var name : String
name = "lateinit initialized"
- var(mutable)만 사용 가능
- null 또는 초깃값을 적용할 필요 없음
- 늦은 초기화이므로 초기화 전에 사용하면 오류 발생
- lateinit property subject has not been initialized
- 변수에 대한 setter/getter 사용할 수 없음
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Function (0) | 2019.07.11 |
---|---|
[Kotlin] Class (0) | 2019.07.11 |
[Kotlin] Types (0) | 2019.07.11 |
[Kotlin] 조건문 (0) | 2019.07.10 |
[Kotlin] 함수와 변수의 범위 (0) | 2019.07.10 |