アイデンティティとImmutable

結城浩

2003年8月9日

Matz日記にアイデンティティの話題が出ていて、 ふむふむ、と読みながら、別のことを考えていた。

スレッド本にImmutableというパターンの話を書いた。 これは状態が変化しないオブジェクトだ。 状態が変化しないオブジェクトは、 自動的にスレッドセーフになる。 なぜなら、スレッドセーフでないという現象は、 あるスレッドが、オブジェクトを状態遷移させている途中(中途半端な状態)に、 別のスレッドが同じオブジェクトに作用を及ぼすときに起きるからだ。 状態遷移しないオブジェクトは中途半端な状態になることはない。 だから自動的にスレッドセーフになる。 例をあげると、java.lang.StringクラスはImmutableであり、 何もしなくてもスレッドセーフになる (インスタンスをコンストラクトするときは例外。構築途中で中途半端な状態を取り得る)。

それはさておき、 変化することのないオブジェクトのアイデンティティは、 その本質(内容)にある。 という話をツッコミに書こうとしたら、 すでにshiroさんが書いていた。ふむふむ、と読みながら、また別のことを考えた。

(以下は、半分はジョークだと思って聞いてください。真面目にとり過ぎないように)

そういえば、神さまも「とこしえからとこしえまで変わらない方」だな。 ということはImmutableだ。 変化することがないから、 そのアイデンティティは参照にあるのではなく、 本質にあるのだな。 おお、三位一体! 三つの位格が同じ本質を持っておられる!