1. 클래스 선언
class test(val name: String) { // constructor 형식으로 호출
var id: int = 0 // set, get 함수 자동으로 생성
val address: string // val일 경우는 get 함수만 생성
}
2. custom set 생성
class test(val name: String) {
var id: int = 0
var address: String = ""
set(value) {
field = value.toLowerCase() // 속성이름을 호출하면 재귀호출이 됨으로 field라는 이름 사용
}
}
2. 상속 허용
코틀린은 기본적으로 상속을 금지
상속을 할려면 class 및 fun에 open 이란 키워드를 사용
open class test {
var id: int = 0
var address: String = ""
fun test_fuc1() { }
open fun test_fuc2() { }
}
3. 위임
import kotlin.reflect.KProperty
class ReplaceString {
var message = ""
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
message = value.toUpperCase()
println("$value ==> ${message}")
}
}
class Test {
var nickname by ReplaceString() // nickname의 set , get 를 ReplaceString 클래스에 위임
}
4. lazy
import java.io.InputStreamReader
import java.net.URL
class test {
var nickname by ReplaceString()
val httpText by lazy { // 실제 사용시점에 변수 초기화
println("lazy init start..")
InputStreamReader(URL("https://www.naver.com").openConnection().getInputStream()).readText()
}
}
5. observe
import java.io.InputStreamReader
import java.net.URL
import kotlin.properties.Delegates
class User {
var nickname = ""
val httpText by lazy {
println("lazy init")
InputStreamReader(URL("http://www.naver.com").openConnection().getInputStream()).readText()
}
var name:String by Delegates.observable("") {
property, oldValue, newValue -> println("기존값 : ${oldValue}, 새로운값 : ${newValue}")
}
}
6. singleton
로그 출력과 같이 인스턴스 전역적으로 공유하고 싶을 경우 singleton 패턴을 사용, 코틀린에서 object 키워드를
사용하여 singleton 생성
object SingletonC {
fun log(text:String) {
println(text)
}
}
7. data
data class 키워드를 사용할 경우 toString(), equals(), hashCode() 함수까지 자동으로 생성
data class User(var nickname:String, var name:String)
8. 내부 / 중첩 클래스
코틀린에서는 java와 다르게 내부 클래스 생성시 inner 키워드를 사용해야 하며, 그 이외에는 모두 중첩 클래스 판단함
class test {
val t=0
//중첩 클래스로 외부 t 변수 접근 불가
class NestedClass {
}
//내부 클래스로 외부 t 변수 접근 가능
inner class InnerClass {
val in_t = t
}
}