개발 언어/코틀린

코틀린(Kotlin) | 클래스 - 프로퍼티(Property)

jjiiiinn 2019. 6. 24. 14:27
728x90

프로퍼티

  • 자바에서는 필드의 개념으로 접근하지만 코틀린에서는 프로퍼티 개념으로 사용한다.
  • 프로퍼티 = 필드 + 접근자
  • 코틀린에서 접근자를 명시하지 않을경우 자동으로 생성해준다.
class Person {
    val name = "park jin"
    var age = 31
    var isMarried = false
}

fun main() {
    val person = Person()
    println("person name is ${person.name}")
    println("person age is ${person.age}")
    println("person is married ${person.isMarried}")
}

커스텀 접근자

접근자에서 계산과 같은 동작을 해야한다면 직접 작성 가능하다.

var <프로퍼티이름>[ : 타입] [= <프로퍼티 초기값>]
[<getter>]
[<setter>]
class Person {
    var name = "park jin"
        get() = "my name is $field"
        set(value) { field = value.toUpperCase() }
}

fun main() {
    val person = Person()
    person.name = "jin"
    println(person.name) // my name is JIN
}

코틀린에서는 필드를 가질수 없음. 하지만 커스텀 접근자 사용시 field접근자를 통해 사용할 수 있으며 커스텀 접근자에서 field를 사용하지 않으면 생성하지 않는다.

class Person {
    var wifeName: String? = null
    val isMarried: Boolean
        get() = this.wifeName != null // no backing field
}

lateinit

  • 프로퍼티를 non null상태에서 초기화를 미룰수 있게 해준다. ex) 의존성 주입(DI)
  • 다음과 같은 제약이 존재한다.
    • var에서만 동작한다. - val은 선언과 동시에 초기화 함.
    • 클래스 몸체, 최상위, 함수 내부에서 선언한 프로퍼티에서만 가능, 주 생성자에서는 사용불가.
    • 커스텀 접근자를 선언하지 않아야한다.
    • null허용에는 사용할 수 없다.
    • 원시타입 프로퍼티에서는 사용 불가하다.
class Person {
    lateinit var name: String
}

fun main() {
    val person = Person()
    //println("my name is ${person.name}") // error: lateinit property name has not been initialized

    person.name = "park jin"
    println("my name is ${person.name}") // my name is park jin
}

 


참조

https://kkangsnote.tistory.com/67

 

[깡샘의 코틀린 프로그래밍] 정리 8 - lateinit

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다. 좀더 자세한 내용은 책을 통해 확인해 주세요. 8장. 프로퍼티 (Property) 8.2.3. 늦은 초기화 lateinit 앞 절에서 프로퍼티를 명시..

kkangsnote.tistory.com

https://altongmon.tistory.com/586

 

코틀린(kotlin) : 프로퍼티와 필드 Properties and Fields

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ 이번 포스팅에서는 코틀린의 프로퍼티와 필드에..

altongmon.tistory.com

https://umbum.tistory.com/591

 

[Kotlin] 프로퍼티, 커스텀 접근자(getter, setter)

프로퍼티 = 필드 + 접근자 클래스 내부의 변수 선언은 자바에서는 필드 선언을 의미하지만 코틀린에서는 프로퍼티 선언을 의미한다. 즉, 필드 뿐만 아니라 접근자 메서드도 알아서 생성해준다. ```kt class Person..

umbum.tistory.com

 

728x90