본문 바로가기

# 02/코틀린

[Kotlin] Properties and Fields

반응형

변수 선언 방법 - 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