Kotlinにおけるclassとdata classの違い

Kotlinにおけるclassとdata classの違い

Kotlin

Kotlinにおけるclassとdata classの違いについてまとめました。

data classとは

data classはKotlin特有の仕様で、データを保持するだけのクラスはdataマークをつけることで定義されます。

data classとは特に何かしらの処理を行うわけではないが、データだけ持っているクラスを作ることができます。つまり、データだけを持ったクラスが生成できます。

data classとして成り立たせるには、最低1つのプライマリコンストラクタ引数を持たせる必要があります。

また、valやvarでイミュータブルかどうかを明示すること、抽象クラスやopenクラス、sealedクラスやinnerクラスでないことが必要です。

 

data classの実装

data classは、dataという修飾子をclassの前につけるだけでdata classとして扱われます。

 

data classとclassの違い

data classとclassの違いは、data classの方はデータを扱うのに便利なメソッドが自動で実装されます。

元々全クラスの継承元、Anyクラスが持つ

  • toString: 型名とプロパティ名、値を文字列として返す
  • hashCode: プロパティの値に基づくハッシュ値を返す
  • equals: オブジェクトの同値性を調べ、Booleanを返す

data classは上記に加え、以下が実装されています。

  • copy: オブジェクトのコピーを返す
  • componentN: N番目のプロパティの値を返す

 

data classで使えるcopyメソッドとcomponentNメソッド

copyメソッド

copyメソッドを使うことで同値の別インスタンスを生成できます。その際プロパティの値を変更することができます。

「プロパティの一部だけ値を変更して、新たなオブジェクトを作る」といった場合はcopyを使うと、全てのプロパティを入力せずに済みます。

例としてcopyメソッドを使って、nameプロパティのみ変更したインスタンスを作成します。

 

componentNメソッド

クラスに宣言したプロパティにcomponent1、component2…でアクセスすることができます。