[kotlin]データクラス(dataclass)


データクラスとは


データクラスの概念はJavaのDTOと同じです

🟤 JavaのDTO

public class User() {
	String id;
    int age;
    
    public User(String id, int age) {
    	this.id = id;
        this.age = age;
    }
    
    //getter & setter 생략
}
このクラスは、データを受信または応答するクラスにすぎません.
コードが多すぎますが、コトリンでは簡単に作成できます.

🟣 コートリンでのDTO(dataclass)

data class User(var Id: String, var Password String)
ジェネレータからgetter、setter、canonical methodsまで、対応するローが自動的に生成されます.
これらのデータ・クラスを宣言する条件はいくつかあります.
  • デフォルトジェネレータには、少なくとも1つのパラメータが必要です.
  • デフォルトジェネレータのパラメータはvalor varのみです.
  • データクラスは抽象的、開放的、密封的、内部的であってはならない.
  • ⚙ Canonical Methods


    CanonicalメソッドはAnyに宣言するメソッドです.
    (AnyがJavaのオブジェクトであるように、コトリンのすべてのオブジェクトの親です.)
    コートリンのdataclassは、以下に示すように、すべてのCanonicalメソッドを実現しています.
  • equals(other:Any?): Boolean-このメソッドは、参照ではなくデータ・クラス間の値の一致を比較します.
  • ハッシュコード():Intハッシュコードは、インスタンスの数値表現である.同じインスタンスでhashCode()を複数回呼び出す場合は、常に同じ値を返さなければなりません.比較がequals()の場合、参照を返す2つのインスタンスは同じhashCode()を持つ必要があります.
  • からString():String-インスタンスの文字列表示.データ・クラスを自動的に再定義し、メンバー変数の値をリストします.
  • 🔍 copy()メソッド


    コトリンのデータクラスはcopy()メソッドも提供し,このメソッドは
    上書きを使用すると、データ・クラスの新しいインスタンスを作成できます.
    新しいインスタンスを作成するのは、深度コピーと言えるでしょう.
    JavaからDTOオブジェクトを深くコピーするには、複数の操作が必要です.
    コトリンはcopy()メソッドで、簡単に深さのコピーができます!
    val oldUser = User("jeongho", 22)
    val newUser = oldUser.copy(id = "newJeongho") // 이름만 변경되고 나이는 oldUser에서 복사

    📰 分解加工設計


    コートリンはDistrict Picturingを提供します.Distributionのため、以下のようになります.
    データ・オブジェクトからデータを抽出するには、何の操作も必要ありません.
    val user: User = User("jeongho", 22)
    val (id, age) = user
    場合によっては、未使用の値を下線()で置き換えることができます.
    val (id, _) = user