Kotlin/포스팅

코틀린 프로퍼티 접근

짜집퍼박사(짜박) 2024. 1. 7. 09:38

코틀린에서 프로퍼티(property)는 클래스 멤버로서 필드(field)와 그에 대한 게터(Getter)와 세터(Setter) 메서드를 캡슐화한 개념입니다. 여기에서는 코틀린 프로퍼티의 선언, 접근, 및 커스터마이징에 대해 알아보겠습니다.

 

1. 코틀린 프로퍼티 선언

프로퍼티는 일반적으로 클래스의 멤버로서 선언되며, 코틀린에서는 다음과 같은 형태로 선언됩니다.

class MyClass {
    var myProperty: Int = 0
}

위의 예제에서 myProperty는 기본적으로 Int 타입의 프로퍼티로 선언되었습니다.

 

2. 프로퍼티 접근

프로퍼티에 대한 접근은 일반적으로 클래스 인스턴스를 통해 이루어집니다. 게터와 세터는 필요에 따라 자동으로 생성되거나 사용자가 직접 정의할 수 있습니다.

fun main() {
    val myObject = MyClass()

    // 프로퍼티에 값 할당 (세터 호출)
    myObject.myProperty = 42

    // 프로퍼티 값 읽기 (게터 호출)
    val value = myObject.myProperty
    println(value) // 출력: 42
}

 

3. 사용자 정의 게터와 세터

코틀린에서는 프로퍼티에 대한 사용자 정의 게터와 세터를 정의할 수 있습니다.

class Person {
    var age: Int = 0
        set(value) {
            // 세터 로직 추가
            field = if (value < 0) 0 else value
        }
        get() {
            // 게터 로직 추가
            return if (field > 100) 100 else field
        }
}

fun main() {
    val person = Person()
    person.age = 25
    println(person.age) // 출력: 25

    person.age = -10
    println(person.age) // 출력: 0 (세터에서 로직 수행)
}

위의 예제에서 age 프로퍼티에 대해 사용자 정의 게터와 세터가 정의되어 있습니다. 세터에서는 음수 값이 들어올 경우 0으로 설정하고, 게터에서는 값이 100을 초과하면 100으로 반환하도록 로직이 추가되어 있습니다.

 

4. lateinit 및 by lazy

lateinit: 사용 시점까지 초기화를 미루고자 할 때 사용하는 키워드

class MyClass {
    lateinit var lateInitProperty: String

    fun initialize() {
        lateInitProperty = "Initialized"
    }
}

fun main() {
    val myObject = MyClass()
    
    // 초기화 전에 접근하면 예외 발생
    // println(myObject.lateInitProperty) 

    myObject.initialize()
    println(myObject.lateInitProperty) // 출력: Initialized
}

by lazy: 처음 접근할 때에만 초기화를 하는 늦은 초기화(lazy initialization)를 위한 속성 대리자.

class Example {
    val lazyProperty: String by lazy {
        println("Lazy property initialized")
        "Lazy Value"
    }
}

fun main() {
    val obj = Example()
    
    // 처음 접근할 때 초기화가 이루어짐
    println(obj.lazyProperty) // 출력: Lazy property initialized
    // 두 번째 접근 시 초기화를 다시 수행하지 않음
    println(obj.lazyProperty) // 출력: Lazy Value
}

 

5. 접근 제어자

코틀린에서는 public, private, internal, protected 등과 같은 접근 제어자를 통해 프로퍼티에 접근을 제한할 수 있습니다.

class Example {
    // 기본적으로 public
    var publicProperty: String = "Public"

    // private으로 접근 제한
    private var privateProperty: String = "Private"
}

fun main() {
    val obj = Example()

    // publicProperty는 외부에서 접근 가능
    println(obj.publicProperty) // 출력: Public
    
    // privateProperty는 외부에서 직접 접근 불가능
    // println(obj.privateProperty) // 에러
}

코틀린 프로퍼티는 많은 다양한 기능을 제공하며, 게터와 세터를 통해 프로퍼티에 추가 로직을 구현할 수 있습니다. 이러한 기능을 통해 코드를 더 간결하고 유연하게 작성할 수 있습니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 객체  (0) 2024.01.07
코틀린 최상위 선언  (0) 2024.01.07
코틀린 코드를 자바에서 사용  (0) 2024.01.07
자바를 코틀린으로 변환하는 변환기  (0) 2024.01.07
코틀린 단일 추상 메서드 인터페이스  (0) 2024.01.07