POJO (Plain Old Java Object) とは
POJO(Plain Old
Java Object)とは、
Javaのオブジェクトの中でも、特にEJB(Enterprise
JavaBeans)のような複雑なフレームワークに依存しない、ごく普通の
Javaオブジェクトを指す言葉です。この用語は、設計はシンプルであるほど良いという考え方を支持する人々に好んで使われます。
概要
2000年9月、
マーティン・ファウラー、レベッカ・パーソンズ、ジョシュ・マッケンジーによって提唱されました。彼らは、システム内で通常のオブジェクトを使うことに抵抗がある人が多い理由を考えた結果、単純なオブジェクトに適切な名前が付けられていないことが原因だと結論付けました。そこで、この用語を命名したところ、広く普及するようになりました。
POJOという命名法は、電話におけるPOTS(
Plain Old Telephone Service)や、
C++で記述されているが
C言語の機能のみを使用するPODS(Plain Old Data Structures)など、高度な新機能を使用しない技術に対する既存の用語と同様のパターンに従っています。
この用語が広く受け入れられた背景には、複雑で特殊なオブジェクトフレームワークと対照的な、一般的で理解しやすい用語が求められていたということがあります。また、
JavaBeansとEnterprise
JavaBeansという似たような名前の用語が存在し、
Javaの"bean"という言葉が混乱を招いていたことも、POJOの概念が受け入れやすかった理由の一つと考えられます。
JavaBeansは、厳格な命名規則を持つシリアライズ可能なPOJOとほぼ言えますが、Enterprise
JavaBeansは単なるクラスではなく、コンポーネントモデル全体を指します(ただし、EJB 3以降ではその差は小さくなっています)。
POJOの概念自体は、POJOという言葉が使われる前から存在していました。オブジェクトクラスが特別なものではないのは、自然なことだからです。POJOという用語の功績は、開発者にフレームワークを使用する利点が、その複雑さを補うかどうかを考えさせる点にあります。シンプル設計の方が優れている場合があるということを思い出させる用語がなければ、複雑なフレームワークが安易に
システムアーキテクチャに組み込まれてしまう可能性がありました。
POJOによる設計が一般的になるにつれて、大規模フレームワークの機能の一部はPOJOでも実現できることが明らかになってきており、実際に必要な機能領域に対する選択肢は広がっています。
HibernateやSpringはその良い例です。
曖昧さの可能性
2005年11月時点では、"POJO"という用語は主に、いかなる(主要な)
Javaオブジェクトモデル、規約、フレームワーク(EJBなど)にも従わない
Javaオブジェクトを指すものとして使われています。しかし、モデルやフレームワークは将来的に変化する可能性があり、また、この分類自体が文脈に依存するため、その定義は本質的に不安定で曖昧な側面があります。
厳密に言えば、POJOは全ての
Javaオブジェクトを指す用語と解釈することも可能です。この解釈に基づけば、POJOに関連する記述はすべての
Javaオブジェクトに例外なく当てはまる必要があります。しかし、多くの人がこの意見には反対しています。
EJB 3の仕様では、EJB 3 Session BeanをPOJOとして記述できると宣言されており、EJB 3のプログラミングモデルはPOJOベースであるとされています。ただし、通常は
アノテーションが必要になります。
まとめ
POJOは、特定のフレームワークに依存しないシンプルな
Javaオブジェクトを指す用語であり、その概念は以前から存在していました。この用語は、複雑なフレームワークに対するアンチテーゼとして、シンプルで効率的な設計を促す役割を果たしています。また、大規模フレームワークの機能の一部をPOJOで実現できることを示し、開発者に幅広い選択肢を提供しています。
関連項目
JavaBeans
Enterprise
JavaBeans (EJB)
外部リンク
*
IT用語辞典e-Words - POJO