코틀린에서 프로퍼티(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 |