TL;DR
強力な機能を提供しながら、シンプルなインタフェースを持つモジュール。A Philosophy of Software Design で、複雑さを管理する上で重要な要素とされている。
なぜ必要か
モジュールのインタフェースは、システムの他の部分に課す複雑さである。インタフェースが小さく単純であれば、もたらされる複雑さを抑えられる。深いモジュールは、内部の複雑さのごく一部しか利用者に見せないので、良い抽象化になる。
仕組み
モジュールの効果を「提供する機能」、費用を「インタフェース」と考えると、深いモジュールは費用対効果が高い。シンプルなインタフェースの後ろに多くの機能が隠されていて、利用者はインタフェースが提供する抽象化だけを理解すればよい。
例
- Unix のファイル I/O は、
open、read、write、lseek、closeの 5 つだけで多くの機能を提供している。 - Go や Java のガベージコレクション。