読み方 : かみクラス

神クラス【God object】

神クラスとは?

オブジェクト指向プログラミングにまつわる俗語の一つで、本来は複数のクラスが分担すべき機能や責任を一つのクラスが抱え込んでしまった状態のこと。英語では “God object” と呼ばれ、典型的なアンチパターンの一つとして知られる。
神クラスのイメージ画像

オブジェクト指向設計の基本は、プログラムを役割ごとの小さな部品に分け、それらを組み合わせてシステムを構成することである。ユーザー情報の管理、メールの送信、データベースとのやり取りといった処理はそれぞれ別のクラスが担うのが理想的とされる。

しかし、開発が進む中で要件の追加や変更が繰り返され、納期の圧力や設計レビューの不足が重なってくると、じっくりと全体の設計や構成を見直す余裕が失われ、「とりあえず既存のクラスに書き足す」という場当たり的な対応に陥りがちとなる。このような対応が常態化した現場では一つのクラスが肥大化していき、神クラスが誕生する。

ひとたび神クラスが出来上がると、コードの行数が極端に増え、内部の処理が複雑に絡み合う。何をしているクラスなのかを外部から把握しにくくなるだけでなく、他のクラスが神クラスに依存する構造が広がり、システム全体の結合度が高まる。修正を加えた際の影響範囲が見通しにくいため、バグが混入しやすくなり、テストも難しくなる。チーム開発では同じクラスを複数人が同時に編集する機会も増え、コードの競合も起きやすい。

クラスへの対処として、機能を役割ごとに切り出して別のクラスへ移す「リファクタリング」が行われる。インターフェースの導入や処理の委譲によって依存関係を整理し、変更の影響が局所に収まる設計へと改善する。ただし、長年積み重なった神クラスを安全に分解するには相当な工数がかかり、既存機能を壊さないよう慎重な作業が求められる。神クラスを生まないためには、コードを書く段階から各クラスの責任範囲を明確にしておくことが求められる。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。