💌 프로퍼티

📌 코틀린에서 프로퍼티 이용

💜 프로퍼티란?

  • 클래스의 변수 (ex/ var, val)
  • 변수처럼 보이지만 함수가 내장된 변수
  • 내부적으로 getter/setter 함수 추가됨

💜 사용자 정의 프로퍼티

  • get() set() 함수 내부에서는 프로퍼티 값을 filed로 접근
  • var로 선언한 프로퍼티는 모두 정의 가능/ val로 선언 시 set()정의 불가능
  • val로 선언한 프로퍼티는 get() 함수 초깃값 명시 안해도됨
  • var로 선언한 프로퍼티는 get() 함수 초깃값 명시 해야함

📌 프로퍼티 초기화

💜 초기화 블록(init)에서 초기화

class User {
    var data: String
    val data2: Int

    init {
       data = "kkang"
        data2 = 10
    }


}
fun main (args: Array<String>){
    val user = User()
    println("data: ${user.data}")
    println("data2: ${user.data2}")
}

🖥
data: kkang
data2: 10

💜 Null 허용으로 선언

  • 프로퍼티 선언 시 null로 초기화한 후 실제 데이터로 값 변경

💜 늦은 초기화

  • lateinit
class User {
  lateinit var lateData: String

}
fun main (args: Array<String>){
    val user = User()
    user.lateData = "hello"
    println(user.lateData)
}

🖥
hello

💜 초기화 미루기

  • by lazy
    • 호출 시점에 초기화 진행
    • val로 선언한 프로퍼티에만 사용 가능
    • 클래스 몸체 이외에 최상위 레벨에서 사용 가능
    • 기초 타입에도 사용 가능
val someData: String by lazy{
    println("i am someData lazy")
    "hello"
}
class User {
    val name: String by lazy{
        println("name lazy")
        "kkang"
    }

    init {
        println("init")
    }
    constructor(){
        println("constructor")
    }

}
fun main (args: Array<String>){
    val user = User()
    println("${user.name}")
}

🖥
init
constructor
name lazy
kkang

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글