読み方 : あたいオブジェクト
値オブジェクト【value object】
概要

オブジェクト指向プログラミングにおいて、オブジェクトが「同じかどうか」を判断する方法は大きく二つある。一つはメモリ上のアドレスや識別子(ID)によって区別する方法であり、これを用いる設計概念を「エンティティ」(entity)と呼ぶ。
もう一つが値オブジェクトの考え方であり、オブジェクトが持つ属性の値がすべて等しければ同一とみなす。例えば「金額:1000円」という値オブジェクトが二つあった場合、それぞれが別のインスタンスであっても、値が同じであれば等価と扱われる。数値や文字列がその典型的な例だ。
値オブジェクトの重要な性質として「不変性」(イミュータビリティ)がある。一度生成された値オブジェクトの内部状態は変更されない。値を変えたい場合は、既存のオブジェクトを変更するのではなく、新しい値を持つオブジェクトを生成するという設計になる。これにより、オブジェクトが意図せず書き換えられることによる不具合を防ぎやすくなる。
値オブジェクトを用いる利点は、ドメイン知識(IT化の対象となる業務領域に固有の知識)の概念をコードで明示的に表現できる点にある。例えば、「金額」を単なる整数型で扱うのではなく、通貨単位や計算ルールを持つ値オブジェクトとして定義することで、誤った操作をデータ型レベルで防ぎ、コードの意図が明確になる。住所、日付範囲、座標、色コードなど、業務上の意味を持つ様々な概念が値オブジェクトとして表現される。