안드로이드

[코틀린] 코틀린 기초 - 2

이손안나 2022. 9. 25. 22:22

최상위 함수 & 최상위 프로퍼티

  • 최상위 프로퍼티에 val, var 모두 사용가능.
  • 상수를 선언할 때에는 const val AGE = "24"

확장 함수 

  • 기존에 만들어져 있는 클래스의 함수를 외부에서 추가하여 확장시킴.
fun String.lastChar(): Char = this[this.length - 1]

커스텀 접근자의 Backing field 

  • 프로퍼티는 값을 직접 저장하는 프로퍼티와 커스텀 접근자를 활용해 매번 새로운 값을 계산하는 프로퍼티가 존재
class User(val name: String) {
  var address: String = "unselected"
    set(value: String) {
      // backing field는 `field`로 접근가능 (get에서는 field를 참조할 수 있지만 읽기만 가능하다.)
      print("백킹 필드값(이전값): $field, 새로운 값: $value")
      field = value
    }
}

fun main() {
  val aUser = User("name")
  aUser.address = "서울시" // setter 호출
  aUser.address = "부산시" // setter 호출
//    ## 출력 ##
//    백킹 필드값(이전값): unselected, 새로운 값: 서울시
//    백킹 필드값(이전값): 서울시, 새로운 값: 부산시
}

Object 키워드 

  • 클래스 선언과 동시에 인스턴스를 생성하여 싱글톤을 보장해준다.
object StringComparator : Comparator<String> {
    override fun compare(o1: String?, o2: String?): Int {
        TODO("Not yet implemented")
    }
}

data class Person(val name: String) {
    //  중접 객체로도 사용하며 외부에서 정적 메서드를 호출하는 거처럼 접근이 가능해진다.
    object NameComparator : Comparator<String> {
        override fun compare(o1: String?, o2: String?): Int {
            TODO("Not yet implemented")
        }

    }
}