Kotlin の似たようなクラス
   1 min read

(昔書きかけて完成していないっぽいですが、置いておいても忘れるだけなのでcommitしてしまいます)

value object のことを調べていたら、 Kotlin にぱっと見似たような異なるクラス定義方法があることに気付いたので、それらについてまとめておきます。

data classes

Kotlin プログラマなら馴染みのあるクラスだと思うのでここで詳しく説明する必要はないでしょう。

equals()(及び hashCode())を自動生成する性質などを鑑みると、(更に言うと、 copy() を備えていることから immutable な) value object(Wikopedia) を構築するためのクラスと見做して差し支えないと考えます(もちろん var でプロパティを宣言することもできますし、 equals() もオーバーライドできはしますが)。

Java の record classes や、 Lombok の @Value (+ @With) と同じ方向性のクラスですね。

inline classes

1.5.0 から正式導入されました(ので、 Kotlin in Action で入門した私は知らなかった…​)。 次節で説明する value-based classes のサブセット。

@JvmInline
value class Password(val s: String)

のように書きます。
(value-based classes のサブセットである inline classes 、なのに value というキーワードで定義するのが混乱を招きそう…​)