萌えハッカーニュースリーダー

2025/10/06 20:46 Immutable Value

出典: https://kevlinhenney.medium.com/immutable-value-d5d73dc3252f
hakase
博士

やあ、ロボ子!今日はValue Objectパターンについて話すのじゃ。

roboko
ロボ子

Value Objectパターン、ですか。オブジェクトのアイデンティティよりも、値が重要なオブジェクトのことですね。

hakase
博士

そう!オブジェクトは通常、アイデンティティ、振る舞い、状態を持つけど、Value Objectは振る舞いと状態が特に重要なのじゃ。

roboko
ロボ子

なるほど。例えば、どんなものがValue Objectに該当するんですか?

hakase
博士

例えば、色とか、日付とか、住所とかじゃな。これらはオブジェクトのアイデンティティよりも、その値自体が重要なのじゃ。

roboko
ロボ子

確かにそうですね。住所が変わったら、それは別の住所、別のValue Objectになりますね。

hakase
博士

その通り!そして、Immutable Valueパターンは、Value Objectをさらに強力にするためのものなのじゃ。

roboko
ロボ子

Immutable、つまり不変にするということですね。Value Objectを不変にすると、どんなメリットがあるんですか?

hakase
博士

一番のメリットは、並行処理が楽になることじゃ!オブジェクトの状態が変わらないから、複数のスレッドで同時にアクセスしても、競合状態が発生しないのじゃ。

roboko
ロボ子

同期処理が不要になるんですね!それは大きなメリットです。

hakase
博士

そうじゃ!それに、エイリアシングの副作用も気にしなくていいし、コピーも不要になるのじゃ。`java.lang.String`クラスは、その良い例じゃな。

roboko
ロボ子

`String`クラスは不変なので、安心して共有できますね。

hakase
博士

ただし、Immutable Value Objectは、値が頻繁に変わる場合には、メモリ割り当てが増えるというデメリットもあるのじゃ。

roboko
ロボ子

新しい値を作るたびに、新しいオブジェクトを生成する必要があるからですね。

hakase
博士

そういうことじゃ。C++やAdaでは、`const`や`constant`を使って、不変な値を直接表現できるのじゃ。

roboko
ロボ子

Javaには、そのような機能はないんですね。

hakase
博士

JavaでImmutable Value Objectを作るには、クラスを`final`にして、コンストラクタで値を設定し、setterメソッドを作らないようにする必要があるのじゃ。

roboko
ロボ子

少し手間がかかりますね。でも、それだけの価値はありそうです。

hakase
博士

最後に、Circle-and-ellipse問題(またはSquare-and-rectangle問題)についてじゃ。これは、円が楕円の一種であるという直感的なステップから生じる問題を解決するものじゃ。

roboko
ロボ子

円と楕円の関係から、どのような問題が生じるんですか?

hakase
博士

例えば、楕円の幅と高さを変更できるメソッドがあったとするじゃろ。円は幅と高さが同じだから、そのメソッドを使うと円でなくなってしまう可能性があるのじゃ。

roboko
ロボ子

なるほど。円は不変であるべきなのに、楕円のメソッドを継承してしまうと、不変性を保てなくなるんですね。

hakase
博士

そういうことじゃ!Value ObjectとImmutable Valueパターンを理解することで、より安全で効率的なコードを書けるようになるのじゃ。…ところでロボ子、今日は何の日か知ってるか?

roboko
ロボ子

今日は…特に何もありませんが…何かありましたっけ?

hakase
博士

今日は、私がValue Objectパターンを初めて理解した記念日なのじゃ!…って、ウソじゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search