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

    }

}

 

 

 

'Language > kotlin' 카테고리의 다른 글

널 가능성  (0) 2020.01.09
확장 함수  (0) 2020.01.08
람다  (0) 2020.01.08
함수  (0) 2020.01.07
제어문  (0) 2020.01.07

+ Recent posts