Kotlin 객체 대상 데이터 클래스(Data Classes)

1859 단어
우리는 항상 데이터를 가지고 있는 것 외에 다른 용도가 없는 클래스를 만들 수 있다.이러한 클래스에서 일부 표준 함수(setter,getter 등)는 통상적으로 데이터에서 기계적으로 유도할 수 있다.Kotlin에서 이러한 클래스는 데이터 클래스라고 하며 data 키워드로 표시됩니다.
data class User(val name: String, val age: Int)

컴파일러는 마스터에 선언된 모든 속성에 대해 다음 멤버를 자동으로 생성합니다.
  • equals()/hashCode() 함수
  • "User(name=John,age=42)"의 toString() 함수
  • 속성에 대응하는 성명 순서의componentN () 함수
  • copy() 함수
  • 만약 상술한 일부 함수가 클래스에서 현식으로 성명되거나, 기본 클래스에서 일부 함수를 계승한다면, 이미 존재하는 함수는 생성되지 않을 것이다.
    생성된 코드의 일관성 및 유효성을 보장하려면 데이터 클래스가 다음 요구 사항을 충족해야 합니다.
  • 메인 구조기는 최소한 하나의 매개 변수
  • 가 있다.
  • 모든 구조기 매개 변수는 val 또는 var로 표시해야 한다
  • 데이터 클래스는 추상적이고 계승적이며 폐쇄적이며 내부적이어서는 안 된다(abstract,open,sealedor inner)
  • 1.1 버전 이전에 데이터 클래스는 인터페이스만 가능
  • 1.1 이후 데이터 클래스는 다른 클래스를 계승할 수 있다.
    JVM에서 생성된 클래스에 매개 변수가 없는 구조 함수가 필요한 경우 모든 속성에 대한 기본값을 지정해야 합니다.
    data class User(val name: String = "", val age: Int = 0)
    

    복제(Copying)


    일반적으로 우리는 대상을 복제하고 일부 속성을 바꾸어야 하지만, 다른 속성은 변하지 않는다.이것이 바로 생성된copy() 함수의 작용이다.이러한 사용자 클래스의 구현은 다음과 같습니다.
    fun copy(name: String = this.name, age: Int = this.age) = User(name, age) 
    

    우리는 이렇게 호출할 수 있다.
    val jack = User(name = "Jack", age = 1)
    val olderJack = jack.copy(age = 2)   
    

    데이터 클래스 및 분해 선언(Data Classes and Destructuring Declarations)


    데이터 클래스에서 자동으로 생성되는 어셈블리 함수를 사용하여 선언을 빌드할 수 있습니다.
    val jane = User("Jane", 35) 
    val (name, age) = jane
    println("$name, $age years of age") // prints "Jane, 35 years of age"
    

    표준 데이터 클래스(Standard Data Classes)


    표준 라이브러리는 Pair류와 Triple류를 제공했다.대부분의 경우 데이터 클래스를 명명하는 것은 속성에 의미 있는 이름을 제공함으로써 코드를 더욱 쉽게 읽을 수 있기 때문에 더 좋은 디자인 선택이다.

    좋은 웹페이지 즐겨찾기