프로퍼티 선언
코틀린 클래스는 프로퍼티를 가질 수 있음.
class Address{
var name: String = "Kotlin"
val city: String = "Seoul"
}
fun copyAddress(address: Address): Address {
val result = Address()
result.name = address.name
// ...
return result;
}
프로퍼티 문법 (C#이랑 비슷함.)
var <propertyName>[: <PropertyType>][=<property_initializer>]
[<getter>]
[<setter>]
프로퍼티 예제
두 코드는 같음. (Default 로 만들어지는 애들이 있음.)
class Address {
var name = "Kotlin"
}
class Address2{
var name: String = "Kotlin"
get() {
return field
}
set(value){
field = value
}
}
var (mutable) 프로퍼티
class Address {
var initialized = 1
var allByDefault: Int?
}
val (read-only) 프로퍼티
class Address{
val initialized = 1
// error 오류 발생. 명시적인 초기화가 필요함.
val allByDefault: Int?
}
Custom Accessors (getter, setter)
val isEmpty: Boolean
get() = this.size == 0
var stringReperesentation: String
get() = this.toString()
set(value) {
setDataFromString(value)
}
타입생략
val isEmpty: Boolean
get() = this.size == 0
val isEmpty
get() = this.size == 0
// 위 아래 코드는 동일함. 생략된 것.
// 자바를 잘 모르니까 Field? 이게 뭔지 잘 모르겠네. 얘도 공부해줘야 함 - 별거 없고 그냥 클래스 내의 멤버변수를 field라고 한다.
프로퍼티
var setterVisibility:String = "abc"
private set
var setterWithAnnotation: Any? = null
@Inject set
var setterVisibility: String = "abc"
private set(value) {
field = value
}
Backing Fields
var counter = 0
set(value) {
if(value >= 0) field = value
}