楠本研究室

業績一覧

ホーム業績一覧

イミュータブルクラスを利用する必要性に関する調査 ~ハッシュ値を利用するデータ型を対象として~

イミュータブルクラスを利用する必要性に関する調査 ~ハッシュ値を利用するデータ型を対象として~
電子情報通信学会技術報告, vol.122, no.138, pp.61-66 (2022)
概要: Javaには複数のオブジェクトを格納するためのさまざまなデータ型が用意されている.その中に,HashMapやHashSetのように格納するオブジェクトのハッシュ値を利用するデータ型がある.このようなハッシュ値を利用するデータ型は,オブジェクトを格納する際にそのオブジェクトのハッシュ値をデータ型の内部に記録する.そのため,格納されたオブジェクトに変更が加わりハッシュ値が変化してしまった場合に,変更後のハッシュ値とデータ型に記録されたハッシュ値との間で不整合が生じてしまう.そこで,このようなハッシュ値を用いるデータ型に格納するオブジェクトのクラスにはその内部状態が生成後に変化しないイミュータブルクラスが推奨されている.しかし,イミュータブルクラスの利用により,ハッシュ値との不整合がどの程度防げているのかについてはこれまで明らかにされてこなかった.そこで本研究では,Javaの実プロジェクトにおいてハッシュ値を利用するHashMapとHashSetを対象とした調査を行い,データ型に格納するオブジェクトはイミュータブルクラスにすべきかを明らかにする.HashMapおよびHashSetに格納された対象プロジェクト内で定義されたクラスを利用していたオブジェクトを対象に,そのクラスがイミュータブルであるか否かの調査を行った.調査の結果,イミュータブルクラスはHashMapでは14.8%,HashSetでは9.7%利用されていると明らかになった.また,過去バージョンではミュータブルクラスであったが,不整合のバグが発生したためにイミュータブルに変更された事例はまったく見つからなかった.
@inproceedings{橋本周2022,
  author = {橋本 周 and 肥後 芳樹 and 楠本 真二},
  title = {イミュータブルクラスを利用する必要性に関する調査 ~ハッシュ値を利用するデータ型を対象として~},
  booktitle = {電子情報通信学会技術報告},
  volume = {122},
  number = {138},
  pages = {61--66},
  year = {2022},
  month = {jul}
}