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…でアクセスすることができます。